GIF поддерживается, но плохо. Просто его надо загружать через класс Movie. При этом на многих GIF-файлах при воспроизведении падают нативные ошибки и приложение закрывается. Еще как вариант можно открыть GIF в WebView, но проблемы при воспроизведении некоторых GIF-файлов все равно есть.
Писал свой декодер GIF с использованием NDK, но проблем с ним тоже было не мало. Так что если есть возможность — с гифом лучше не связываться.
Если в анимации кадров много, то через AnimationDrawable конечно не получится ее проиграть. Можно просто по одному загружать кадры, декодировать в Bitmap, отрисовывать и делать recycle. При этом 15-20 fps должно получится.
В этом конкретном случае как раз s1 == s2 будет true. Строка «123» попадет в пул констант и обе переменные s1 и s2 будут ссылаться на одну и ту же строку. Где только про это не написано…
Ага, а еще лучше вообще сервис использовать для таких целей :)
Ну WeakReference тут лишнее, если уже собрались вызывать cancel. Так что да, можно просто в cancel занулять listener.
Вообще в конце концов вызов метода AsyncTask.cancel заканчивается вызовом Thread.interrupt, который в свою очередь просто выставляет флажок о том, что поток прерван.
Если поток в этот момент заблокирован на методах wait, sleep или join, то поток разблокируется и эти методы кинут InterruptedException. Если поток в этот момент занят чем-то другим и не заблокирован, то InterruptedException бросится сразу при первом вызове wait, sleep или join.
Такая проблема может возникнуть, если плохо написать метод AsyncTask.doInBackground :)
Т. е. так, чтобы он не предоставлял возможность отменить свое выполнение. Например, выполнять в нем какие-нибудь сложные расчеты, которые занимают много времени. При этом вызовов wait, sleep или join не будет. Если периодически не проверять не отменена ли задача и прекращать вычисления, то вызов AsyncTask.cancel ничего не даст.
В случае сетевого запроса скорее всего такой проблемы не возникнет, но лично я бы на всякий случай дополнительно в onStop убирал listener из AsyncTask.
В вызове AsyncTask.cancel никакой магии нет — задача завершится только если это возможно.
AsyncTask.cancel внутри вызывает FutureTask.cancel, который делает вот что:
Attempts to cancel execution of this task. This attempt will fail if the task has already completed, has already been cancelled, or could not be cancelled for some other reason.
Все зависит от того, что происходит в AsyncTask.doInBackground. Нужно удалять listener из AsyncTask, иначе можно получить memory leak.
Ничего себе никакой — а memory leak за проблему уже не считается? :) Пока не завершится выполнение AsyncTask сборщик мусора не сможет собрать MyActivity.
Ага, ну так понятнее, вы просто считаете, что constant pool — это «logic of our applications» :) Мне кажется, что логика приложения — это все-таки оставшиеся 20-50%, которые приходятся в class-файлах на методы.
Если в цикле складывать миллион строк — то ничего хорошего не получится и без волшебного Stringer Java Obfuscation Toolkit :)
Так а конкретных цифр для Dalvik у вас нет? Есть ли разница между Dalvik и JVM? Все-таки в dex пул констант общий.
Размещал приложение в LG SmartWorld, Samsung Apps Store и Amazon App Store — суммарно за несколько месяцев установок набралось меньше ста. При этом на Google Play 400k установок.
А LG SmartWorld и Samsung Apps Store мне показалось решили сделать в принципе максимально неудобными для публикации приложений и им это удалось.
Мне кажется r_ii про хэндлер, который передается в ResultReceiver в конструктор, он там действительно для того, чтобы на нем вызывать onReceiveResult, поэтому onReceiveResult будет выполнен в том же потоке, из которого вызвался createIntent. А вообще каждый раз создавать новый Handler там тоже не нужно :)
Ок, oDesk Wizard вполне себе приложение, но рейтинг в 3.5 говорит, что не такое уж оно и удачное. Хотя не рейтингом единым, конечно. Но Digital Clock Wallpaper, например. Сколько точно таких часов от таких же начинающих разработчиков уже есть в Google Play?
Про Shabbat и Yahrzeit даже не знаю, что написать. Даже если закрыть глаза на то, что два этих приложения недалеко ушли от hello world, оно ведь и работает не очень, судя по отзывам: «Problem is that it has zero accuracy in calculating.»
Дизайнер оформляет кнопочки, иконки и прочую приятную мишуру, чтобы результат смотрелся солиднее.
Вот тут особенно солидно смотрится :) Серые буквы на желтоватом фоне, ну нечитаемо же практически.
У меня такое получается, когда я начинаю заниматься дизайном.
Судя по средней оценке в 2.2 — пользователи очень рады, что им приходится еще дополнительно качать и устанавливать Ministro :) Зато быстро с Qt портировалось, да.
Писал свой декодер GIF с использованием NDK, но проблем с ним тоже было не мало. Так что если есть возможность — с гифом лучше не связываться.
Если в анимации кадров много, то через AnimationDrawable конечно не получится ее проиграть. Можно просто по одному загружать кадры, декодировать в Bitmap, отрисовывать и делать recycle. При этом 15-20 fps должно получится.
В этом конкретном случае как раз s1 == s2 будет true. Строка «123» попадет в пул констант и обе переменные s1 и s2 будут ссылаться на одну и ту же строку. Где только про это не написано…
Ну WeakReference тут лишнее, если уже собрались вызывать cancel. Так что да, можно просто в cancel занулять listener.
Если поток в этот момент заблокирован на методах wait, sleep или join, то поток разблокируется и эти методы кинут InterruptedException. Если поток в этот момент занят чем-то другим и не заблокирован, то InterruptedException бросится сразу при первом вызове wait, sleep или join.
Такая проблема может возникнуть, если плохо написать метод AsyncTask.doInBackground :)
Т. е. так, чтобы он не предоставлял возможность отменить свое выполнение. Например, выполнять в нем какие-нибудь сложные расчеты, которые занимают много времени. При этом вызовов wait, sleep или join не будет. Если периодически не проверять не отменена ли задача и прекращать вычисления, то вызов AsyncTask.cancel ничего не даст.
В случае сетевого запроса скорее всего такой проблемы не возникнет, но лично я бы на всякий случай дополнительно в onStop убирал listener из AsyncTask.
AsyncTask.cancel внутри вызывает FutureTask.cancel, который делает вот что:
Все зависит от того, что происходит в AsyncTask.doInBackground. Нужно удалять listener из AsyncTask, иначе можно получить memory leak.
Не эксперт в криптографии, но AES же симметричный, ключ должен хранится в приложении — разве его сложно расшифровать?
Если в цикле складывать миллион строк — то ничего хорошего не получится и без волшебного Stringer Java Obfuscation Toolkit :)
Так а конкретных цифр для Dalvik у вас нет? Есть ли разница между Dalvik и JVM? Все-таки в dex пул констант общий.
Это вы как так посчитали?
А как вообще дела обстоят с потерей производительности? Все-таки строки приходится расшифровывать в рантайме.
А LG SmartWorld и Samsung Apps Store мне показалось решили сделать в принципе максимально неудобными для публикации приложений и им это удалось.
А dex2jar падает — это не показатель, его пофиксят.
Только если свое приложение работает в нескольких процессах. Иначе будет падать эксепшн в intent.getParcelableExtra, т.к. класс такой не найдет.
Вот как. Ну тогда вполне успешный, особенно если учесть, что аналогов вроде как больше и нет в Google Play.
Вот это я и имел ввиду — зачем этот hello wallpaper в маркете? :)
Это жесть. Ну ладно, жираф большой — ему видней :)
Про Shabbat и Yahrzeit даже не знаю, что написать. Даже если закрыть глаза на то, что два этих приложения недалеко ушли от hello world, оно ведь и работает не очень, судя по отзывам: «Problem is that it has zero accuracy in calculating.»
Вот тут особенно солидно смотрится :) Серые буквы на желтоватом фоне, ну нечитаемо же практически.
У меня такое получается, когда я начинаю заниматься дизайном.
Маркет не жалко?