반응형
2020/04/08 - [안드로이드/개발자 일상] - 안드로이드 생명주기 (LifeCycle)
위 링크에서 했던 생명주기 테스트 앱으로 실행해 보았습니다.
우리가 알고 있는 생명 주기는
onCreate - > onStart -> onResume -> onPause -> onStop -> onDestroy
뒤로가기 또는 finish()로는 onDestroy가 호출되지만... 아래 상황에서는 onDestroy가 호출이 안된다!!
문제의 경우..
휴대폰에 위 화면과 같이 앱을 강제 종료 시킬 수 있습니다.
하지만 앱 개발자 입장에서는 생명주기가 실행되지 않으니, 이 시점을 알고 싶을때가 있습니다.
이때 Service를 이용하여 Task가 종료 되었을때로 알 수 있습니다.
( 다른 방법을 알고 계시면 댓글로 알려주세요~!! )
우선 Service를 상속받은 Class를 만듭니다.
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
|
public class ForecdTerminationService extends Service {
@Nullable
@Override
public IBinder onBind(Intent intent) {
return null;
}
@Override
public void onTaskRemoved(Intent rootIntent) { //핸들링 하는 부분
Log.e("Error","onTaskRemoved - 강제 종료 " + rootIntent);
Toast.makeText(this, "onTaskRemoved ", Toast.LENGTH_SHORT).show();
stopSelf(); //서비스 종료
}
}
|
그리고 Service를 Manifest에 등록합니다.
1
2
3
4
5
6
7
8
9
10
11
12
13
|
</application
<service android:name=".util.ForecdTerminationService"
android:stopWithTask="false" />
</application>
|
해당 앱의 제일 초기 액티비티에서 실행해줍니다.
1
2
3
4
5
6
7
8
9
10
11
|
public class MainActivity extends Activity {
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
startService(new Intent(this, ForecdTerminationService.class));
}
}
|
이제 앱을 실행하여 강제 종료 시에도 알 수 있습니다.
<실행 화면>
onDestroy도 호출되고 service의 onTaskRemoved도 호출되는 것을 볼 수 있습니다.
아래 실행 화면은 여러개의 Activity가 있을 경우, 강제 종료시킨다면
Task에 존재하는 Activityd의onDestroy가 다 실행됩니다.
( MainAcitivity와 SecondActivity의 onDestroy가 둘다 호출됩니다. )
반응형
'안드로이드 > 개발자 일상' 카테고리의 다른 글
안드로이드 RecyclerView 리스트 이동 (삼선 이미지 드래그 시) (11) | 2020.04.13 |
---|---|
안드로이드 ActivityManager (제일 위에 있는 Activity 알아보기) (5) | 2020.04.10 |
안드로이드 생명주기 (LifeCycle) (4) | 2020.04.08 |
안드로이드 Retrofit2+RecyclerView 1-2 (추가 밀어서 삭제,편집 ) (5) | 2020.04.06 |
안드로이드 AlarmManager 1-2 (날짜 선택 추가) (8) | 2020.04.04 |
댓글