IT Share you

내 앱이 언제 종료되었는지 어떻게 알 수 있습니까?

shareyou 2020. 12. 14. 21:07
반응형

내 앱이 언제 종료되었는지 어떻게 알 수 있습니까?


사용자가 내 앱을 종료하는시기를 알아야합니다 (강제 중지). onStop()onDestroy()기능 이있는 Android 수명주기를 읽고 있었는데, 이는 사용자가 내 앱에서 종료하는 각 활동과 관련이 있지만 사용자가 내 앱을 강제로 중지하거나 종료 할 때는 관련이 없습니다.

사용자가 앱을 언제 종료했는지 알 수있는 방법이 있습니까?


프로세스가 종료되는시기를 확인할 방법이 없습니다. 에서 안드로이드 응용 프로그램은 강제로 중지하거나 제거 할 경우 어떻게 감지?

사용자 또는 시스템 강제가 응용 프로그램을 중지하면 전체 프로세스가 단순히 종료됩니다. 이런 일이 발생했음을 알리는 콜백이 없습니다.

사용자가 앱을 제거하면 처음에 프로세스가 종료되고 사용자가 등록한 인 텐트 필터를 다른 앱에 알려주는 패키지 관리자의 레코드와 함께 apk 파일 및 데이터 디렉터리가 삭제됩니다.


한 가지 방법을 찾았습니다 .....

  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));
    

그리고 이제 안드로이드에서 최근 앱을 지울 때 마다이 메서드 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.

Even if you are application Killed or force stop, again Android will start your Application class


You can always use this code:

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

After digging into this problem I found a solution that might help you:

All you need to do is check on the onDestroy method of your BaseActivity that is extended by all your activities whether the last running activity of the stack is from your package or not with the following code:

ActivityManager activityManager = (ActivityManager) getSystemService( ACTIVITY_SERVICE );

List<ActivityManager.RunningTaskInfo> taskList = activityManager.getRunningTasks( 10 );

if ( !taskList.isEmpty() )
    {
     ActivityManager.RunningTaskInfo runningTaskInfo = taskList.get( 0 );
      if ( runningTaskInfo.topActivity != null && 
              !runningTaskInfo.topActivity.getClassName().contains(
                    "com.my.app.package.name" ) )
         {
        //You are App is being killed so here you can add some code
         }
    }

I have alternate idea.i have same problem like you.above methods not fix.my problem : "i want to clear all saved data entire app,when user completely close the app"

So, i added clear() & clear saved data(from shared preference or tinyDB) in Application class.

참고URL : https://stackoverflow.com/questions/21040339/how-to-know-when-my-app-has-been-killed

반응형