현재 액티비티와 기본 액티비티 클래스 가져오기
Java 기본 클래스 BaseActivity를 만들고 상속받기
android.support.v7.app.AppCompatActivity
그 다음 이 기본 클래스 안에서 onCreate 메서드를 재정의합니다
그 안에 로그를 추가합니다
Log.d(“현재 액티비티”,getClass().getSimpleName());
이렇게 하면 어느 액티비티로 들어가든 현재 어떤 화면인지 알 수 있습니다
package com.foxdevelop.www.lifedemo;
import android.os.Bundle;
import android.support.annotation.Nullable;
import android.support.v7.app.AppCompatActivity;
import android.util.Log;
public class BaseActivity extends AppCompatActivity {
@Override
protected void onCreate(@Nullable Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
Log.d("현재 액티비티",getClass().getSimpleName());
}
}Code language: JavaScript (javascript)
05-13 08:36:47.473 18499-18499/? D/현재 액티비티: MainActivity
05-13 08:36:56.460 18499-18499/com.foxdevelop.www.lifedemo D/현재 액티비티: NormalActivity
05-13 08:37:03.839 18499-18499/com.foxdevelop.www.lifedemo D/현재 액티비티: Activity3
05-13 08:38:11.104 18499-18499/com.foxdevelop.www.lifedemo D/현재 액티비티: NormalActivity
한 번에 앱 종료
세 번째 액티비티에 있을 때 앱을 종료하려면 뒤로가기 버튼을 세 번 눌러야 해서 불편합니다
홈 버튼을 누르면 앱이 종료되는 것이 아니라 일시 중단됩니다.
그렇다면 한 번에 앱을 종료하려면 어떻게 해야 할까요.
모든 액티비티를 관리하는 전용 컬렉션 클래스를 만들 수 있습니다.
이 문제를 처리할 액티비티 관리자를 추가합니다
이것은 컬렉션 클래스로 모든 액티비티를 담는 List가 있습니다. add, remove 메서드로 목록에 액티비티를 추가하거나 삭제합니다
기본 액티비티의 onCreate에서 add를 호출하고 onDestroy에서 remove를 호출합니다
이렇게 하면 List에는 스택 위에 존재하는 액티비티만 유지됩니다
List가 각 액티비티의 참조를 보관하기 때문에 finish를 호출하면 해당 액티비티에 적용됩니다.
그 다음 컬렉션 클래스에 finishAll 메서드를 추가합니다
이 메서드에서는 foreach 반복문을 사용해 각 액티비티의 finish를 호출합니다
아래에서 직접 테스트해보겠습니다
세 번째 액티비티에 버튼 클릭 이벤트를 등록하고 이 컬렉션 클래스를 호출합니다.
finishAll을 정적 메서드로 감쌉니다.
완전히 종료시키기 위해 시스템 killProcess 메서드로 현재 앱 프로세스를 죽일 수 있습니다.
android.os.Process.KillProcess(android.os.Process.myPid());
액티비티 관리자 클래스
package com.foxdevelop.www.lifedemo;
import android.app.Activity;
import java.security.PublicKey;
import java.util.ArrayList;
import java.util.List;
public class ActivityHelper {
public static List<Activity> activities = new ArrayList<Activity>();
public static void add (Activity a)
{
activities.add(a);
}
public static void remove (Activity a)
{
activities.remove(a);
}
public static void finishAll()
{
for (Activity a:activities)
{
a.finish();
}
}
}Code language: JavaScript (javascript)
기본 액티비티에서 액티비티 추가 및 삭제
액티비티 생성 시 추가: onCreate
액티비티 소멸 시 삭제: onDestroy
package com.foxdevelop.www.lifedemo;
import android.os.Bundle;
import android.support.annotation.Nullable;
import android.support.v7.app.AppCompatActivity;
import android.util.Log;
public class BaseActivity extends AppCompatActivity {
@Override
protected void onCreate(@Nullable Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
Log.d("현재 액티비티",getClass().getSimpleName());
ActivityHelper.add(this);
}
@Override
protected void onDestroy() {
super.onDestroy();
ActivityHelper.remove(this);
}
}Code language: JavaScript (javascript)
Activity3에 버튼을 추가해 finishAll 메서드 호출하기
<?xml version="1.0" encoding="utf-8"?>
<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
android:orientation="vertical" android:layout_width="match_parent"
android:layout_height="match_parent">
<TextView
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:text="세 번째 액티비티" />
<Button
android:id="@+id/button"
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:text="앱 종료" />
</LinearLayout>Code language: HTML, XML (xml)
public class Activity3 extends BaseActivity {
private static final String TAG = "세 번째 액티비티";
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_3);
Log.e(TAG, "" + getTaskId());
Button b = (Button)findViewById(R.id.button);
b.setOnClickListener(
new View.OnClickListener(){
@Override
public void onClick(View view){
ActivityHelper.finishAll();
}
}
);
}
}Code language: PHP (php)
액티비티 조작