Я хочу дать пользователю возможность выбирать язык интерфейса приложения и контент в нем на разных языках.
Я хочу перезагрузить новые свежие локализованные данные с сервера с новым языком, который выбирает пользователь.
Чтобы восстановить приложение с новыми настройками языка, я планирую:
- Сохранить выбранный язык в общих настройках.
- Вызовите stopService () на двух моих IntentServices.
- Полностью убить запущенное в данный момент приложение с ответом здесь: Как программно "перезапустить" приложение для Android?
- При запуске MyApplication сначала проверьте общие предпочтения и, если они содержат новый пользовательский язык, - затем очистите почти все записи в базе данных SharedPreferances, Realm.
- снова запустите все службы, и теперь они пойдут на сервер и получат новые данные с новыми языковыми предпочтениями.
Что я хочу понять об убийстве приложений, так это:
В момент уничтожения моего текущего запущенного приложения - все мои запущенные Services, Threads, ThreadExecutors, CompositeDisposable, WorkEnqueuer, Runnables, AsyncTasks, Handlers
и все эти потоки и (работающие в фоновом режиме) будут остановлены в тот же момент, что и System.exit(0)
будет называться? Означает ли это, что когда я убиваю свое приложение, оно также полностью и немедленно останавливает работу всех связанных с потоками вещей?
Будут ли все библиотеки, которые я использую, выгружаться из памяти, а затем, на втором этапе, будут правильно переинициализированы? Такие библиотеки как: RealmDB, Firebase, Dagger, RxJava2, Retrofit
? Список библиотек и служб, которые я использую в своем проекте, приведен ниже.
Будут ли все статические переменные повторно инициализированы?
Спасибо.
Вот манифест и библиотеки, которые я использую:
<application
android:allowBackup="false"
android:hardwareAccelerated="true"
android:icon="@mipmap/ic_launcher"
android:label="@string/app_name"
android:largeHeap="true"
android:roundIcon="@mipmap/ic_launcher_round"
android:supportsRtl="true"
android:name=".application.MyApplication"
android:theme="@style/AppTheme"
tools:replace="android:allowBackup">
<activity
android:name=".view.activity.SplashActivity"
android:label="@string/app_name"
android:screenOrientation="portrait"
android:launchMode="singleTask"
android:theme="@style/Theme.AppCompat.Translucent">
<intent-filter>
<action android:name="android.intent.action.MAIN" />
<category android:name="android.intent.category.LAUNCHER" />
</intent-filter>
</activity>
<service android:name=".services.MyFirebaseMessagingService">
<intent-filter>
<action android:name="com.google.firebase.MESSAGING_EVENT" />
</intent-filter>
</service>
<service android:name=".services.MyFirebaseInstanceIDService">
<intent-filter>
<action android:name="com.google.firebase.INSTANCE_ID_EVENT" />
</intent-filter>
</service>
<receiver android:name="com.appsflyer.MultipleInstallBroadcastReceiver" android:exported="true">
<intent-filter>
<action android:name="com.android.vending.INSTALL_REFERRER" />
</intent-filter>
</receiver>
<receiver android:name="io.branch.referral.InstallListener" android:exported="true">
<intent-filter>
<action android:name="com.android.vending.INSTALL_REFERRER" />
</intent-filter>
</receiver>
<receiver
android:name="com.google.android.gms.analytics.AnalyticsReceiver"
android:enabled="true">
<intent-filter>
<action android:name="com.google.android.gms.analytics.ANALYTICS_DISPATCH" />
</intent-filter>
</receiver>
<service
android:name="com.google.android.gms.analytics.AnalyticsService"
android:enabled="true"
android:exported="false" />
<receiver
android:name="com.google.android.gms.measurement.AppMeasurementReceiver"
android:enabled="true"
android:exported="false"/>
<receiver
android:name="com.google.android.gms.measurement.AppMeasurementInstallReferrerReceiver"
android:enabled="true"
android:permission="android.permission.INSTALL_PACKAGES">
<intent-filter>
<action android:name="com.android.vending.INSTALL_REFERRER" />
</intent-filter>
</receiver>
<service
android:name="com.google.android.gms.measurement.AppMeasurementService"
android:enabled="true"
android:exported="false" />
<service
android:name=".services.MyIntentService"
android:enabled="true"
android:exported="false" />
<service
android:name=".services.MyJobIntentService"
android:exported="false"
android:permission="android.permission.BIND_JOB_SERVICE" />
</application>
Библиотека:
com.google.dagger:dagger
com.jakewharton:butterknife
io.reactivex.rxjava2:rxjava
com.github.bumptech.glide:glide
com.google.code.gson:gson
com.squareup.retrofit2:retrofit
com.facebook.android:facebook-android-sdk
com.google.android.gms:play-services-auth
com.google.firebase:firebase-core
io.realm:realm-gradle-plugin