ユーザーがアプリを強制終了したとき(強制停止)を知る必要があります。私はAndroidライフサイクル、これにはonStop()
およびonDestroy()
関数があります。これらはユーザーがアプリで終了する各アクティビティに関連しています。 、ただしユーザーがアプリを強制的に停止または強制終了した場合はそうではありません。
ユーザーがアプリをいつ削除するかを知る方法はありますか?
プロセスがいつ強制終了されるかを判断する方法はありません。から Androidアプリが強制停止またはアンインストールされているかどうかを検出する方法?
ユーザーまたはシステムがアプリケーションを停止すると、プロセス全体が強制終了されます。これが発生したことを通知するコールバックはありません。
ユーザーがアプリをアンインストールすると、最初にプロセスが強制終了され、次にapkファイルとデータディレクトリが削除されます。また、パッケージマネージャー内のレコードも削除されます。
私はこれを行う1つの方法を見つけました.....
このようなサービスを1つ作成します
_public class OnClearFromRecentService extends Service {
@Override
public IBinder onBind(Intent intent) {
return null;
}
@Override
public int onStartCommand(Intent intent, int flags, int startId) {
Log.d("ClearFromRecentService", "Service Started");
return START_NOT_STICKY;
}
@Override
public void onDestroy() {
super.onDestroy();
Log.d("ClearFromRecentService", "Service Destroyed");
}
@Override
public void onTaskRemoved(Intent rootIntent) {
Log.e("ClearFromRecentService", "END");
//Code here
stopSelf();
}
}
_
このサービスをManifest.xmlにこのように登録します
_<service Android:name="com.example.OnClearFromRecentService" Android:stopWithTask="false" />
_
次に、スプラッシュアクティビティでこのサービスを開始します
_startService(new Intent(getBaseContext(), OnClearFromRecentService.class));
_
そして、アプリをAndroid recent)からクリアするたびに、このメソッドonTaskRemoved()
が実行されます。
注:Android O +では、このソリューションは、アプリがフォアグラウンドでフルタイムの場合にのみ機能します。アプリをバックグラウンドで1分以上経過すると、OnClearFromRecentService(および実行中の他のすべてのサービス) onTaskRemoved()が実行されないように、システムによって自動的に強制終了されます。
アプリケーションクラスを作成する
onCreate()
Called when the application is starting, before any activity, service, or receiver objects (excluding content providers) have been created.
onLowMemory()
This is called when the overall system is running low on memory, and actively running processes should trim their memory usage.
onTerminate()
This method is for use in emulated process environments.
アプリケーションが強制終了または強制停止されている場合でも、再びAndroidはApplicationクラスを開始します
このコードはいつでも使用できます。
protected void onCreate(Bundle savedInstanceState) {
//...
Thread.setDefaultUncaughtExceptionHandler(new UncaughtExceptionHandler() {
@Override
public void uncaughtException(Thread thread, Throwable ex) {
//inform yourself that the activity unexpectedly stopped
//or
YourActivity.this.finish();
}
});
//...
}