Согласно ответу ankuranurag2, это правда, что некоторые бренды андроидов принудительно закрывают приложение после недавних убийств.проверьте эту проблему в диспетчере работ google tracker https://issuetracker.google.com/issues/110745313 для тега № 2.
Даже я также пытался запустить задание в фоновом режиме после недавнего удаления приложения (устройство - HUAWEI BKL-L09), но не может этого сделать.
Проверен параметр автозапуска после изменения его вручную, после чего он работал нормально.Но это не очень хорошая идея для UX, чтобы сказать пользователю об изменении опции автозапуска, и мы не можем определить, включена она или выключена.
После поиска я дал исправление патча, я думаюэто не лучшее решение, но можно проверить, что оно работает для меня.
1-й Создайте службу, которая идентифицирует уничтожение процесса приложения, на который я ссылался по этому URL https://stackoverflow.com/a/42856811/8264148
UserKillingService
class UserKillingService : Service() {
override fun onBind(intent: Intent?)= null
override fun onStartCommand(intent: Intent?, flags: Int, startId: Int)= Service.START_NOT_STICKY
override fun onDestroy() {
super.onDestroy()
}
override fun onTaskRemoved(rootIntent: Intent?) {
val i = Intent(this,StartUpActivity::class.java)
i!!.addFlags(Intent.FLAG_ACTIVITY_NEW_TASK)
i!!.putExtra("USER_KILLED", "USER_KILLED")
startActivity(i)
//stop the service
stopSelf()
}
}
Настройка службы в манифесте
<service android:name=".UserKillingService"
android:stopWithTask="false"/>
Эта служба вызывает StartUpActivity в onTaskRemoved и останавливает службу, которая вообще не требуется.
это действие является основным действием средства запускабез пользовательского интерфейса
StartUpActivity
<activity android:name=".StartUpActivity"
android:theme="@android:style/Theme.NoDisplay">
<intent-filter>
<action android:name="android.intent.action.MAIN" />
<category android:name="android.intent.category.LAUNCHER" />
</intent-filter>
</activity>
или вы можете использовать android: theme = "@android: style / Theme.Translucent.NoTitleBar"
Inside onCreate of StartUpActivity
if (intent.hasExtra("USER_KILLED")) {
//finish the instance
finish()
} else {
SplashActivity::class.start(this@StartUpActivity,finish = true)
}
Этот запуск запуска завершится без принудительной остановки приложения,Это действие вызывает splashActivity, когда оно не запускается из UserKillingService.
Внутри SplashActivity onCreate вызывает UserKillingService
if(Build.VERSION.SDK_INT>=Build.VERSION_CODES.O)
startService(Intent(baseContext,UserKillingService::class.java))
Пожалуйста, сообщите мне, если вы найдете какое-либо лучшее решение.Извините за мой английский