Как стать автором
Обновить

Комментарии 22

А android:installLocation=«preferExternal» не проще ли? Алсо, GPL 2 для библиотеки хреновая линензия.
В манифесте это есть. Но это только приложение устанавливается на карту памяти, а тут любые файлы копировать с помощью приложения.
А какую посоветуешь лицензию с большей открытостью, для распространения данной программы? Советовали MIT или APL2.0, но я пока еще не выбрал.
Я всё равно не понимаю, почему не затолкать всё в res или assets, поставить preferExternal и расслабиться? В конце концов не везде есть SD (Nexus S).
Лицензию любую BSD-подобную (MIT, ZLIB, etc..). Для десктопов в принципе подойдёт LGPL, но для мобильных платформ она особо не применима.
Спасибо.
На сколько знаю, что если все ресурсы будут в приложении, тогда они и в памяти будут висеть, а помять так же не везде большая, поэтому и разработчики используют метод для хранения ресурсов на SD карте.
А приложение позволяет просто копировать нужные файлы на карту памяти. Хотя действительно, там где нет карты памяти будут проблемы с этим подходом.
apk он маппит через mmap() так что по необходимости memory cache будет сброшен. Я конечно могу ошибаться, но логично если ресурсы так и остаются в пределах замапленного региона, в сжатом виде, а распаковываются на ходу в AssetInputStream. Так что я не вижу причины париться если не превышен лимит на размер apk (не помню сколько там).
На сколько знаю — почти 50 мегабайт, но это в маркете, а так очень большим может быть.
Возможно так есть, я таких подробностей не знаю. Написал для практического применения в некоторых программах и для изучения платформы. Но по идее все-таки файлы висят в оперативной памяти, если они берутся из самого приложения, а если с карты памяти — нет. А приложение бывает нужно, что бы работало всегда, и не выгружается из памяти.
Не совсем так. Файлы мапятся в виртуальное адресное пространство приложения. Изначально, эти адреса не имеют физических страниц, но при первом обращении к замапленному файлу будут выделены физические страницы и в них прочитаны данные из файла. Так вот, когда ядро почует нехватку памяти оно пойдёт и поотрывает физические страницы у давно не используемых маппингов. Как только приложение сново захочет полезть за ресурсам (т.е. обратиться по адресам маппинга) — не проблема, ядро уж где-нить нароет новых страниц (возможно по пути грохнув какой-нить другой процесс).
Т.е. грубо говоря наличие ресурсов в памяти это кэш. Если просто читать файлы с SD карты то они также попадут в кэш только немного другими путями. Так что зачем платить больше :)

В твоём случае ты сначала всосёшь в память ресурсы из APK, а затем продублируешь данные на SD карту тем самым в два раза больше отъев страниц (которые разумеется могут быть оторваны в случае out of memory).

Хотя если уже есть и работает то можешь оставить как есть. У меня просто долго компилируется проект и я каратаю время развёрнутыми ответами :)
Спасибо за сведения, приму к сведению. А программа как таковая одноразовая, надо всего 1 раз прочитать файл и записать его, больше этот файл не понадобится (если это конечно не зип архив, который далее будет извлекаться)
Спрашиваю как новичок.
1. А разве в андроиде лисенеры нельзя объявить в xml?
2. А обязательно создавать классы и методы при помощи оператора new? Это не нарушает single responsibility?
1. Можно, но раз есть два варианта, то почему бы не сделать наоборот? Лично мне удобней в коде, чем в xml, не знаю правильно или нет, но для меня — xml — все отображение программы, код — действия, соответственно лисенеры.
1. можно элементу в layout дописать android:onClick=«myClickHandler» и тогда в классе писать
public void myClickHandler(View v) {}
Но тоже придерживаюсь принципа, что все обработчики должны быть в классе. Плюс эта возможность поддерживается вроде начиная с 2.1 версии Android.
НЛО прилетело и опубликовало эту надпись здесь
Это что, корейцы мегабайты таким образом генерируют, только комментарии на английском и корейском :)
Комментарии дописал уже в статье. насчет if'ов согласен, новичек в Яве, поэтому еще не изучил все хорошо. репозиторий обновлю.
Спасибо.
НЛО прилетело и опубликовало эту надпись здесь
Благодарю. Изучу.
Тогда рекомендую еще Макконнелла «Совершенный код», но там не только про рефакторинг, а и про проектирование в общем, но пригодится — точно:)
Спасибо.
P.S. Сложно писать на новом для тебя языке без плохого кода в начале.
Насчет комментариев на русском жаловаться не буду, но зачем так много? Например:
//нажали «Удалить»
//Выходим…
Это же статья для не совсем новичков? Да и по коду ясно что exit() — выход:)))
Верно, все-таки надо убрать лишние. Старался сделать код понятный всем.
Одно маленькое замечание вместо того чтобы указывать путь как "/sdcard" + dir, пользуйтесь Environment.getExternalStorage() + dir. Это избавит от ошибок на девайсах без sd карты.
Спасибо, обновлю.
Зарегистрируйтесь на Хабре , чтобы оставить комментарий

Публикации

Истории