Попробовать то обязательно стоит, может взлетит. Но если посмотреть их мастер-классы и доклады на предыдущих I/O, то можно заметить примерно такое:
— ребята, используйте AsyncTask
— а не, удобнее использовать пустой Fragment с setRetainInstance(true)
— короче, используйте фоновый сервис и ServiceConnection/ResultReceiver
— погодите, мы вам Loader и LoaderManager запилили
— всё фигня, теперь у вас есть JobScheduler!
Хотя, возможно, я утрирую. В любом случае «MVVM» + Data Binding должны хорошо дополнить друг друга.
Какое-то бредовое исследование. «После» не значит «потому, что». Такое впечатление, что его автор выбрал одно из миллиона изменений, которое ему больше понравилось, и навыдумывал из него выводов. Где доказательство того, что именно эти изменения привели к популяризации сервисов, а не, скажем, прически исполнителей?
traceroute to 54.192.98.202 (54.192.98.202), 64 hops max, 52 byte packets
1 192.168.1.1 (192.168.1.1) 4.154 ms 1.202 ms 1.142 ms
2 l37-192-43-253.novotelecom.ru (37.192.43.253) 2.057 ms 1.900 ms 2.525 ms
3 10.245.139.37 (10.245.139.37) 4.933 ms 3.877 ms 2.329 ms
4 10.245.139.38 (10.245.139.38) 2.696 ms 4.924 ms 3.947 ms
5 nsk06.nsk32.transtelecom.net (217.150.61.78) 3.381 ms 4.655 ms 3.448 ms
6 * bl-gw.transtelecom.net (188.43.29.50) 6.030 ms *
7 bl-gw.transtelecom.net (188.43.29.49) 4.707 ms 5.341 ms 7.678 ms
Ага, спасибо! В первом примере просто пропущено слово «infix» у оператора «to», я не сразу заметил. В общем, покапитаню и скажу, что определяя оператор «to» внутри класса Struct мы получаем доступ и к объекту Struct и к строке перед оператором и ко второму параметру, следующему после оператора «to» и в этом сам фокус. С «invoke» та же история.
Откуда взялась эта абсолютно бредовая уверенность компилятора в том, что каждая буква моей программы — это элемент многопоточной конкуренции?
Дело не в многопоточности, а в том, что value — это не поле, а property. Когда вы вызываете if ( value != null ) или return value, вы обращаетесь не к полю value, а к геттеру, которого в вашем случае не видно, но он может появиться в наследнике класса. А так как геттер — обычная функция, он может вернуть как null так и не null, даже будучи вызваным 2 раза подряд.
К слову, для публикации в fabric от них же есть плагин к gradle, так что можно при желании поменять задачу в дженкинсе на таску в gradle. По мне так удобнее. Будет выглядеть примерно так
defaultConfig {
applicationId "com.myapp"
minSdkVersion 15
targetSdkVersion 25
versionCode 2
versionName "1.2"
ext.betaDistributionGroupAliases = "mydevteam"
ext.betaDistributionNotifications = true
ext.betaDistributionReleaseNotes = "No Release Notes for this build."
}
А, я понял сакральный замысел. Этот патч для тех, кто давным давно наигрался и сидит в непроплате. Теперь они смогут вернуться и играть бесплатно на триальных правах. Онлайн повысится на 3,5 человека, наверно.
К слову сказать, в еве сейчас есть триальные аккаунты на 2 и 4 недели (примерно). Новый альфа клон судя по всему будет иметь примерно такие же ограничения, что и триальные аккаунты, т.е. это просто бесконечный триал. За месяц в еве новичку можно разобраться вполне, зачем этот бесконечный триал нужен кому-то, кроме как в качестве альта к уже зрелому аккаунту (мониторинг цен, мониторинг локала, мониторинг ВХ) вообще не представляю.
Кстати, https не такая уж проблема, если подсунуть на wi-fi точку, к которой подключен девайс, свой сертификат и установить его в доверенные на девайсе. С эмулятором и того проще.
Я тоже согласен с другими комментариями, конкретно вот это кресло как в статье очень удачное и надежное. Пожалуй, самое живучее из всех, на чем я сидел :)
Тут же столько вариантов, прям как запихать два инта в лонг. Можно оффсет хранить, можно отрицательные id использовать :D
Кстати, шутки шутками, а в VK API идентификаторы сообществ отрицательные.
— ребята, используйте AsyncTask
— а не, удобнее использовать пустой Fragment с setRetainInstance(true)
— короче, используйте фоновый сервис и ServiceConnection/ResultReceiver
— погодите, мы вам Loader и LoaderManager запилили
— всё фигня, теперь у вас есть JobScheduler!
Хотя, возможно, я утрирую. В любом случае «MVVM» + Data Binding должны хорошо дополнить друг друга.
Или проще:
В первом примере result уже не property, а локальная переменная(константа), значение которой мы проверяем напрямую, без геттера.
Можно вот так:
Дело не в многопоточности, а в том, что value — это не поле, а property. Когда вы вызываете if ( value != null ) или return value, вы обращаетесь не к полю value, а к геттеру, которого в вашем случае не видно, но он может появиться в наследнике класса. А так как геттер — обычная функция, он может вернуть как null так и не null, даже будучи вызваным 2 раза подряд.
Ну и подключить сам плагин
Но лучше поставить в Android Studio плагин Fabric IDE Plugin (https://fabric.io/downloads/android) и он сможет настроить это все автоматически
Это, конечно, вариант, но придется прочитать все 171 пунктов, что бы выписать все числа. Но фильтровать можно и по названию пакета, например
К слову, для публикации в fabric от них же есть плагин к gradle, так что можно при желании поменять задачу в дженкинсе на таску в gradle. По мне так удобнее. Будет выглядеть примерно так
И сама таска
Кстати, шутки шутками, а в VK API идентификаторы сообществ отрицательные.
onSaveInstanceState()/onCreate() действительно вызываются, но не те, к которым мы привыкли, а новые, те что с 21 API: onSaveInstanceState(android.os.Bundle, android.os.PersistableBundle) и onCreate(android.os.Bundle, android.os.PersistableBundle)