@android_ru

Страница 390 из 3205
Алексей
11.10.2016
15:43:43
Да я бывает передаю контекст, например для работы с базой

Ну например возьмем базу, поиск из базы, добавление, удаление

Передал контекст и данные, м статичном методе всё записал в базу

Или надо синглтон базы?

Google
Dmitry
11.10.2016
15:46:47
DAO, ContentProvider, лучше будет

Алексей
11.10.2016
15:48:06
DAO, ContentProvider, лучше будет
Для работы с базой ок, использую и посмотрю

Дальше, допустим класс хелпер для работы со строками. Строку передал, строку получил

Можно cтатик метод?

Максим
11.10.2016
15:50:25
Если коротео, что делает Looper,

?

У меня с потоками не очень

Точнее с теорией

Сам лупер с хендлером юзал, но что он делает не знаю))

Dmitry
11.10.2016
15:52:37
Можно cтатик метод?
нормуль, утилитарный класс аля StringUtils

Алексей
11.10.2016
15:53:17
https://m.habrahabr.ru/post/142256/ там куча инфы по этому вопросу

нормуль, утилитарный класс аля StringUtils
Так как понять когда можно Статик метод а когда не стоит?

Dmitry
11.10.2016
15:54:46
Если коротео, что делает Looper,
Вкратце - связывает текущий поток с очередью сообщений, чреез которую ты можешь потом взаиможействовать например с помощью Handler ну ил инапрямую/

Google
Dmitry
11.10.2016
15:56:26
ну и поток естественно не будет остановлен пока не будет вызван quit

Максим
11.10.2016
15:56:58
https://m.habrahabr.ru/post/142256/ там куча инфы по этому вопросу
Только что прочитал. Я использовал только Looper только для паузы в сплешскрине или для исполнения кода в UI потоке через getMainLooper()

Например, где его можно использовать помимо этих задач? Есть пример из жизни?

58 вниз голосования Looper позволяет задачи, которые будут выполняться последовательно на одном потоке. И обработчик определяет те задачи, которые мы должны выполнить.

Теперь понял

http://stackoverflow.com/questions/7597742/what-is-the-purpose-of-looper-and-how-to-use-it

Vitaly
11.10.2016
16:02:08
Так как понять когда можно Статик метод а когда не стоит?
Понять, как это работает под капотом. Если ты хранишь в статик поле вьюху или контекст - это плохо

грубо говоря, если у тебя есть класс public class A { static Context context; public A(Context ctx) { context = ctx; } public static myMethod() { context.doSomething... } }

вот за такое надо руки оторвать

Владимир
11.10.2016
16:05:34
а если сам класс статик, а ему передаются view или context как переменные ?

Vitaly
11.10.2016
16:05:58
если они передаются в метод, то емнип работает так-же как и любой локальный скоуп

живо до тех пор, пока жив метод

Владимир
11.10.2016
16:06:06
или метод у класса статик?

Fieldmarshal
11.10.2016
16:06:10
Ребята, кто-то из вас создаёт прототип UI приложения в процессе разработки? С помощью какого инструмента вы это делаете? Какие есть хорошие бесплатные программы или онлайн-редакторы для прототипирования? Сам гуглил, находил только платные и free trial.

Владимир
11.10.2016
16:06:36
скретч

Pavel
11.10.2016
16:06:45
Зеплин вроде проект бесплатно

Vitaly
11.10.2016
16:07:01
вот более коректный пример говнокода

Alexander
11.10.2016
16:07:06
ninja mock

Vitaly
11.10.2016
16:07:07
public class myActivity extends ListActivity { public static Context baseContext; public void onCreate(Bundle savedInstanceState) { baseContext = getBaseContext(); }

статик живет намного дольше активити

Google
Vitaly
11.10.2016
16:07:29
даже когда myActivity будет уничтожено - контекст протечет

потому что статик жив пока живо приложение и никак не завязан на lifecycle активити

более того, каждый поворот такого активити будет удваивать пробоину

Vitaly
11.10.2016
16:08:57
это понятно, ещё есть примеры?
примеры зависят от того, каким извращенным способом ты умудришься использовать механизм

Fieldmarshal
11.10.2016
16:09:08
ninja mock
Пробовал ninjamock, там практически нет шаблонов по Material Design, что весьма печально.

Vitaly
11.10.2016
16:09:10
здесь нет конкретных случаев вида "не делай вот так и вот так"

если ты понимаешь как работает static - у тебя никогда не будет проблем

но вот например кейс как пробить вьюшку на память

анонимный класс для обработки коллбэка

Владимир
11.10.2016
16:09:52
вот класс Tools и его метод

public static List<WifiInfo> filter(List<WifiInfo> models, String query) { query = query.toLowerCase(); final List<WifiInfo> filteredModelList = new ArrayList<>(); for (WifiInfo model : models) { final String text = model.SSID.toLowerCase(); if (text.contains(query)) { filteredModelList.add(model); } } return filteredModelList;

Vitaly
11.10.2016
16:09:55
если (убаси б-г)

Dmitriy
11.10.2016
16:09:58
здесь нет конкретных случаев вида "не делай вот так и вот так"
а что насчет контекста в статик филде аппликейшена?

Vitaly
11.10.2016
16:10:04
у тебя из активити дергается сетевой запрос

и передается обработчик коллбэка как анонимный класс - то это звездец в квадрате

Alexander
11.10.2016
16:10:39
@fm_norton ну тогда проще взять какой-нибудь kit с готовыми кусками интерфейса и побырому состряпать прототип. В том же скетче, или фотошопе, или ai

Vitaly
11.10.2016
16:10:55
во-первых, оно течет. Потому что анонимный класс держит ссылку на outer класс до тех пор, пока не отработает асинхронный метод, во-вторых, коллбэк может прилететь когда активити уже нет и это краш

Vitaly
11.10.2016
16:11:41
а что насчет контекста в статик филде аппликейшена?
не смотря на ворнинг студии ничего страшного. Сам static живет столько, сколько живет application

Google
Dmitriy
11.10.2016
16:12:20
не смотря на ворнинг студии ничего страшного. Сам static живет столько, сколько живет application
я еще частенько встречал @NonNull public static Application get(@NonNull Context context) { return (Application) context.getApplicationContext(); } выглядит как костыль, зато линт не ругается :D

Vitaly
11.10.2016
16:12:55
локальный скоп

память удерживается до тех пор, пока метод находится в стаке

ничего текущего тут нет

Admin
ERROR: S client not available

Владимир
11.10.2016
16:18:27
про мой метод что скажете? не течет?

Aleksei
11.10.2016
16:20:35
А зачем тут статика?

Vitaly
11.10.2016
16:20:45
таки да

течь не течет, но это во-первых не нужно

Aleksei
11.10.2016
16:27:39
более того, каждый поворот такого активити будет удваивать пробоину
То есть удваивает? Судя по коду оно будет перезаписано и ссылка на прошлый контекст потеряется, в результате gc ее удалит

Владимир
11.10.2016
16:28:35
Что бы потом просто сделать Tools.filter()

и получить отфильтрованный список

Aleksei
11.10.2016
16:33:42
Что бы потом просто сделать Tools.filter()
Я не по вашему коду, у вас вроде все хорошо, мой клиент подлагивает

Алексей
11.10.2016
18:44:08
Если я передам контекст активити в какой-то статичный метод, то после уничтожения активити в том методе останется ссылка на активити и будет утечка. Я все правильно понял?)

Так я могу тогда в конце метода обнулить контекст, и не будет тогда проблем....

Yuri
11.10.2016
18:47:44
Понял правильно =) Можно и обнулить в конце метода. Только нужен ли вам контекст активити? Почему бы не взять контекст аппликейшена?

Ну и не понятно, когда будет этот "конец метода" — он может быть очень даже не скоро, тогда память будет занятся "зря"

Алексей
11.10.2016
18:56:50
Ого я говнокодер?

Я бы рассказал, но стыдно ?

Google
Алексей
11.10.2016
19:03:14
Хорошо проект новый начал, не успел наговнокодить

Gerc
11.10.2016
19:14:20
Потом будешь все даггером инжектить

Aleksei
11.10.2016
19:18:12
Так я могу тогда в конце метода обнулить контекст, и не будет тогда проблем....
Не используйте статический филд, только методы в классе, все переменные передаваемые в метод не будут утекать

Denis
11.10.2016
19:20:00
Andre
11.10.2016
19:21:07
А на открытие базы, проверку интернета что лучше активити или аппликэйшен?
ну вот представь, что не будешь ты это писать в реализации активити проще всего, естественно, ссылаться на контекст приложения да и надежнее, потому что оно явно дольше не умрёт

Denis
11.10.2016
19:22:01
ну и поток естественно не будет остановлен пока не будет вызван quit
А когда и где его нужно вызывать в своем коде?

Алексей
11.10.2016
19:22:31
Спасибо всем, много интересного узнал

Andre
11.10.2016
19:23:31
Алексей
11.10.2016
19:23:35
Потом будешь все даггером инжектить
О раз про дагер пошло. Инъекция зависимостей) можете рассказать что к чему?)

Andre
11.10.2016
19:23:45
ты же лупер используешь в каком-то треде наверное

Denis
11.10.2016
19:25:12
в конце метода, например
Надо в try finally оборачивать?

Andre
11.10.2016
19:26:00
Надо в try finally оборачивать?
все методы Looper.x() тебе обязательно вызывать, так что да, если у тебя там исключения будут выбрасываться

Denis
11.10.2016
19:27:04
ты же лупер используешь в каком-то треде наверное
А где его можно использовать помимо обновления ui? А если используешь Rx он нужен?

Andre
11.10.2016
19:27:29
А где его можно использовать помимо обновления ui? А если используешь Rx он нужен?
а это не ко мне если в rx используются android.os.Handler — да, нужен

оно ж как-то криво работает, если вьютайпы и их количество не пропишешь

Denis
11.10.2016
19:30:10
А в котлине нет async/await как в c#?

Страница 390 из 3205