Android

Android. Выполнение задач в бэкграунде.

Posted by Olegas on Январь 23, 2012
IT / 2 Comments

На Stackoverflow часто встречаются вопросы по выполнению на Android фоновых задач, в т.ч. и повторяющихся с заданным промежутком времени. Как правило, первое, что используется, это Service.

Такой подход в некоторых случаях может привести к тормозам и низкой скорости ответа пользовательского интерфейса. Расскажу когда так бывает и как с этим бороться…
Continue reading…

Tags: ,

Мошеннические Android-приложения…

Posted by Olegas on Сентябрь 27, 2011
IT / 1 Comment

Поскольку я являюсь разработчиком Android-приложения, то слежу за появлением новых ссылок на него с помощью подписок Google. Сегодня утром я с радостью обнаружил в ящике письмо, в котором присутствовала новая ссылка на мое приложение. Все отлично! И отзыв положительный, и количество загрузок отличное от 0 вот только версия почему-то старая и… размер APK целых 3 мегабайта против оригинальных ~200К

После загрузки и распаковки APK (вспоминаем что APK это просто ZIP-архив) в нем обнаружилась «набивка» из 153 PNG файлов (переименованных зачем-то в .temp) со свидетелем из Фрязино и собственно «приложение»…

Как и следовало ожидать, от оригинального приложения там ничего не осталось. Ни иконки, ни, тем более, кода. А при дальнейшем рассмотрении (похоже что) ВСЕ файлы на androides-os.com – одна и та же программа! Я скачал несколько разных программ из разных разделов и все они были одного размера и с одинаковым содержимым!

Внутри оказалось нечто, которое по беглому анализу ресурсов оказалось приложением, запрашивающим активацию путем отправки SMS. Попробуем разобраться, куда и что отправляется…

Continue reading…

Tags: ,

Делаем простейший сборщик ошибок для Android

Posted by Olegas on Июль 11, 2011
IT / No Comments

При разработке приложения неизбежно приходится сталкиваться с ошибками в коде и/или окружении. И очень печально когда подобные ошибки встречаются не на тестовом телефоне/эмуляторе а у живых пользователей. Еще печальнее если это не ваш друг бета-тестер и толком никто не может объяснить что и где свалилось.

Обычно при внезапном падении приложения Android предлагает отправить отчет об ошибке, где будет и подробный стэк-трейс и информация о версии вашего приложения. К сожалению пользователи не всегда нажимают кнопку «отправить отчет» а для дебаг-приложений или приложений не из маркета такая функциональность и вовсе недоступна.

Что же делать? На помощь приедет возможность языка Java обрабатывать исключения (Exceptions), в том числе и непойманные (unhandled).

Continue reading…

Tags: ,

Занятный баг с TabHost в Android 2.1

Posted by Olegas on Май 04, 2011
IT / No Comments

Обнаружили с коллегой занятный баг в Android, связанный с работой TabHost.

Суть в следующем. Если после onCreate в вашей TabActivity внутри TabHost не будет создано ни одной корректной вкладки все хозяйство с треском осыпается. Причем стэк очень интересный. По нему сложно выявить причину ибо в нем нет ничего, кроме кода ядра ОС.

Выглядит примерно так

Exception: java.lang.NullPointerException
Message: null
Stacktrace:
        android.widget.TabWidget.dispatchDraw(TabWidget.java:241)
        android.view.ViewGroup.drawChild(ViewGroup.java:1565)
        android.view.ViewGroup.dispatchDraw(ViewGroup.java:1294)
        android.view.ViewGroup.drawChild(ViewGroup.java:1565)
        android.view.ViewGroup.dispatchDraw(ViewGroup.java:1294)
        android.view.ViewGroup.drawChild(ViewGroup.java:1565)
        android.view.ViewGroup.dispatchDraw(ViewGroup.java:1294)
        android.view.View.draw(View.java:6588)
        android.widget.FrameLayout.draw(FrameLayout.java:383)
        android.view.ViewGroup.drawChild(ViewGroup.java:1567)
        android.view.ViewGroup.dispatchDraw(ViewGroup.java:1294)
        android.view.View.draw(View.java:6588)
        android.widget.FrameLayout.draw(FrameLayout.java:383)
        com.android.internal.policy.impl.PhoneWindow$DecorView.draw(PhoneWindow.java:1869)
        android.view.ViewRoot.draw(ViewRoot.java:1384)
        android.view.ViewRoot.performTraversals(ViewRoot.java:1149)
        android.view.ViewRoot.handleMessage(ViewRoot.java:1668)
        android.os.Handler.dispatchMessage(Handler.java:130)
        android.os.Looper.loop(Looper.java:154)
        android.app.ActivityThread.main(ActivityThread.java:4416)
        java.lang.reflect.Method.invokeNative(Native Method)
        java.lang.reflect.Method.invoke(Method.java:552)
        com.android.internal.os.ZygoteInit$MethodAndArgsCaller.run(ZygoteInit.java:910)
        com.android.internal.os.ZygoteInit.main(ZygoteInit.java:668)
        dalvik.system.NativeStart.main(Native Method)

Лечится, очевидно, корректной подготовкой табов в onCreate. Что интересно, в 2.2 такого бага уже нет.

Tags: ,