web-dev-qa-db-ja.com

アプリがいつ削除されたかを知る方法は?

ユーザーがアプリを強制終了したとき(強制停止)を知る必要があります。私はAndroidライフサイクル、これにはonStop()およびonDestroy()関数があります。これらはユーザーがアプリで終了する各アクティビティに関連しています。 、ただしユーザーがアプリを強制的に停止または強制終了した場合はそうではありません。

ユーザーがアプリをいつ削除するかを知る方法はありますか?

56
Darknoe

プロセスがいつ強制終了されるかを判断する方法はありません。から Androidアプリが強制停止またはアンインストールされているかどうかを検出する方法?

ユーザーまたはシステムがアプリケーションを停止すると、プロセス全体が強制終了されます。これが発生したことを通知するコールバックはありません。

ユーザーがアプリをアンインストールすると、最初にプロセスが強制終了され、次にapkファイルとデータディレクトリが削除されます。また、パッケージマネージャー内のレコードも削除されます。

20
Taranfx

私はこれを行う1つの方法を見つけました.....

  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();
        }
    }
    _
  2. このサービスをManifest.xmlにこのように登録します

    _<service Android:name="com.example.OnClearFromRecentService" Android:stopWithTask="false" />
    _
  3. 次に、スプ​​ラッシュアクティビティでこのサービスを開始します

    _startService(new Intent(getBaseContext(), OnClearFromRecentService.class));
    _

そして、アプリをAndroid recent)からクリアするたびに、このメソッドonTaskRemoved()が実行されます。

注:Android O +では、このソリューションは、アプリがフォアグラウンドでフルタイムの場合にのみ機能します。アプリをバックグラウンドで1分以上経過すると、OnClearFromRecentService(および実行中の他のすべてのサービス) onTaskRemoved()が実行されないように、システムによって自動的に強制終了されます。

113
Faisal Khan

アプリケーションクラスを作成する

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クラスを開始します

4
rajahsekar

このコードはいつでも使用できます。

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();
        }
    });
//...
}
0
lagoman