Andorid의 taskAffinity 및 FLAGACTIVITY_NEW_TASK
9745 단어 Android진급taskAffinityAndorid
1), 두 플래그 모두 2로 설정하지 않음), FLAGACTIVITY_NEW_TASK3), FLAG 없음ACTIVITY_NEW_TASK에는 taskAffinity(MainActivity와 다르다)4, FLAG 가 있습니다.ACTIVITY_NEW_TASK에는 taskAffinity가 있어요.
위의 플래그는 모두 시작 시 ActivityA, FLAG 에 대한 것입니다.ACTIVITY_NEW_TASK는ActivityA를 시작하는 Intent에서 설정한 것이고,taskAffinity는AndroidManifest에서ActivityA에서 설정한 것이며,이 두 actiity의 시작 모드는standard로 설정되어 있음을 주의하십시오
1. 첫 번째 상황을 먼저 본다.
기본 코드:
MainActivity 시작 activity
public void onClick(View arg0) {
// TODO Auto-generated method stub
Log.i(TAG, "--onClick--task id = " + getCurrentTaskId());
Intent intent = new Intent("com.leaves.ipanel.ActivityA");
startActivity(intent);
}
A 를 시작한 후 스택:
ACTIVITY MANAGER ACTIVITIES (dumpsys activity activities)
Main stack:
TaskRecord{415ebce8 #37 A com.leaves.ipanel U 0}
Intent { act=android.intent.action.MAIN cat=[android.intent.category.LAUNCHER] flg=0x10000000 cmp=com.leaves.ipanel/.MainActivity }
Hist #2: ActivityRecord{42358368 u0 com.leaves.ipanel/.ActivityA}
Intent { act=com.leaves.ipanel.ActivityA cmp=com.leaves.ipanel/.ActivityA }
ProcessRecord{42384ad8 7591:com.leaves.ipanel/u0a10061}
Hist #1: ActivityRecord{4132a3d0 u0 com.leaves.ipanel/.MainActivity}
Intent { act=android.intent.action.MAIN cat=[android.intent.category.LAUNCHER] flg=0x10000000 cmp=com.leaves.ipanel/.MainActivity }
ProcessRecord{42384ad8 7591:com.leaves.ipanel/u0a10061}
TaskRecord{41350f60 #2 A com.android.launcher U 0}
Intent { act=android.intent.action.MAIN cat=[android.intent.category.HOME] flg=0x10000000 cmp=com.android.launcher/com.android.launcher2.Launcher }
Hist #0: ActivityRecord{41616790 u0 com.android.launcher/com.android.launcher2.Launcher}
Intent { act=android.intent.action.MAIN cat=[android.intent.category.HOME] flg=0x10000000 cmp=com.android.launcher/com.android.launcher2.Launcher }
ProcessRecord{41615818 628:com.android.launcher/1000}
그의 액션을 시작하는 것과 같은task에 속한다는 것을 알 수 있습니다.
2、FLAG 있음ACTIVITY_NEW_TASK
FLAG 추가ACTIVITY_NEW_TASK
public void onClick(View arg0) {
// TODO Auto-generated method stub
Log.i(TAG, "--onClick--task id = " + getCurrentTaskId());
Intent intent = new Intent("com.leaves.ipanel.ActivityA");
intent.addFlags(Intent.FLAG_ACTIVITY_NEW_TASK);
startActivity(intent);
}
A 시작 후 스택
ACTIVITY MANAGER ACTIVITIES (dumpsys activity activities)
Main stack:
TaskRecord{415ebce8 #37 A com.leaves.ipanel U 0}
Intent { act=android.intent.action.MAIN cat=[android.intent.category.LAUNCHER] flg=0x10000000 cmp=com.leaves.ipanel/.MainActivity }
Hist #2: ActivityRecord{42358368 u0 com.leaves.ipanel/.ActivityA}
Intent { act=com.leaves.ipanel.ActivityA cmp=com.leaves.ipanel/.ActivityA }
ProcessRecord{42384ad8 7591:com.leaves.ipanel/u0a10061}
Hist #1: ActivityRecord{4132a3d0 u0 com.leaves.ipanel/.MainActivity}
Intent { act=android.intent.action.MAIN cat=[android.intent.category.LAUNCHER] flg=0x10000000 cmp=com.leaves.ipanel/.MainActivity }
ProcessRecord{42384ad8 7591:com.leaves.ipanel/u0a10061}
TaskRecord{41350f60 #2 A com.android.launcher U 0}
Intent { act=android.intent.action.MAIN cat=[android.intent.category.HOME] flg=0x10000000 cmp=com.android.launcher/com.android.launcher2.Launcher }
Hist #0: ActivityRecord{41616790 u0 com.android.launcher/com.android.launcher2.Launcher}
Intent { act=android.intent.action.MAIN cat=[android.intent.category.HOME] flg=0x10000000 cmp=com.android.launcher/com.android.launcher2.Launcher }
ProcessRecord{41615818 628:com.android.launcher/1000}
그의 액션을 시작하는 것과 같은task에 속한다는 것을 알 수 있다.
3, FLAG 없음ACTIVITY_NEW_TASK에는 taskAffinity(MainActivity와는 다르다)가 있습니다.
public void onClick(View arg0) {
// TODO Auto-generated method stub
Log.i(TAG, "--onClick--task id = " + getCurrentTaskId());
Intent intent = new Intent("com.leaves.ipanel.ActivityA");
startActivity(intent);
}
A를 시작한 후 스택을 확인합니다.
ACTIVITY MANAGER ACTIVITIES (dumpsys activity activities)
Main stack:
TaskRecord{415ebce8 #37 A com.leaves.ipanel U 0}
Intent { act=android.intent.action.MAIN cat=[android.intent.category.LAUNCHER] flg=0x10000000 cmp=com.leaves.ipanel/.MainActivity }
Hist #2: ActivityRecord{42358368 u0 com.leaves.ipanel/.ActivityA}
Intent { act=com.leaves.ipanel.ActivityA cmp=com.leaves.ipanel/.ActivityA }
ProcessRecord{42384ad8 7591:com.leaves.ipanel/u0a10061}
Hist #1: ActivityRecord{4132a3d0 u0 com.leaves.ipanel/.MainActivity}
Intent { act=android.intent.action.MAIN cat=[android.intent.category.LAUNCHER] flg=0x10000000 cmp=com.leaves.ipanel/.MainActivity }
ProcessRecord{42384ad8 7591:com.leaves.ipanel/u0a10061}
TaskRecord{41350f60 #2 A com.android.launcher U 0}
Intent { act=android.intent.action.MAIN cat=[android.intent.category.HOME] flg=0x10000000 cmp=com.android.launcher/com.android.launcher2.Launcher }
Hist #0: ActivityRecord{41616790 u0 com.android.launcher/com.android.launcher2.Launcher}
Intent { act=android.intent.action.MAIN cat=[android.intent.category.HOME] flg=0x10000000 cmp=com.android.launcher/com.android.launcher2.Launcher }
ProcessRecord{41615818 628:com.android.launcher/1000}
앞의 두 가지 상황과 같다.
4、FLAG 있음ACTIVITY_NEW_TASK에는 taskAffinity가 있어요.
FLAGACTIVITY_NEW_TASK 추가.
public void onClick(View arg0) {
// TODO Auto-generated method stub
Log.i(TAG, "--onClick--task id = " + getCurrentTaskId());
Intent intent = new Intent("com.leaves.ipanel.ActivityA");
intent.addFlags(Intent.FLAG_ACTIVITY_NEW_TASK);
startActivity(intent);
}
A를 시작한 후 스택을 확인합니다.
ACTIVITY MANAGER ACTIVITIES (dumpsys activity activities)
Main stack:
TaskRecord{4140d4c8 #42 A com.leaves.test.ActivityA U 0}
Intent { act=com.leaves.ipanel.ActivityA flg=0x10000000 cmp=com.leaves.ipanel/.ActivityA }
Hist #2: ActivityRecord{416b48d8 u0 com.leaves.ipanel/.ActivityA}
Intent { act=com.leaves.ipanel.ActivityA flg=0x10000000 cmp=com.leaves.ipanel/.ActivityA }
ProcessRecord{41393ed0 8028:com.leaves.ipanel/u0a10061}
TaskRecord{4231cf40 #41 A com.leaves.ipanel U 0}
Intent { act=android.intent.action.MAIN cat=[android.intent.category.LAUNCHER] flg=0x10000000 cmp=com.leaves.ipanel/.MainActivity }
Hist #1: ActivityRecord{413c8430 u0 com.leaves.ipanel/.MainActivity}
Intent { act=android.intent.action.MAIN cat=[android.intent.category.LAUNCHER] flg=0x10000000 cmp=com.leaves.ipanel/.MainActivity }
ProcessRecord{41393ed0 8028:com.leaves.ipanel/u0a10061}
TaskRecord{41350f60 #2 A com.android.launcher U 0}
Intent { act=android.intent.action.MAIN cat=[android.intent.category.HOME] flg=0x10000000 cmp=com.android.launcher/com.android.launcher2.Launcher }
Hist #0: ActivityRecord{41616790 u0 com.android.launcher/com.android.launcher2.Launcher}
Intent { act=android.intent.action.MAIN cat=[android.intent.category.HOME] flg=0x10000000 cmp=com.android.launcher/com.android.launcher2.Launcher }
ProcessRecord{41615818 628:com.android.launcher/1000}
이번에 드디어 새task에서ActivityA가 시작되었습니다.
위에서 우리가 테스트한 두 개의Activity는 같은 응용 프로그램에 있다. 만약에 그들이 다른 응용 프로그램에 있다면? 예를 들어ActivityA와MainActivity는 한 apk에 있지 않다. 사실 상황은 똑같다. 단지 이때만Android Manifest가 없었다면.xml에taskAffinity를 설정하면 그들 둘의taskAffinity는 다르다.기본적으로taskAffinity가 설정되어 있지 않으면taskAffinity는 가방 이름과 같기 때문에,ActivityA와MainActivity가 한 apk에 없으면FLAGACTIVITY_NEW_TASK의 경우 둘 다 같은 task에 있어야 하지만 FLAGACTIVITY_NEW_TASK는 다른 task에 있을 것이다.
요약:
FLAG를 설정하지 않은 경우ACTIVITY_NEW_TASK, 그리고 하나의 activity에서 다른 activity를 시작합니다. 즉, 소스Record가null이 아니면 새로 시작하는 TaskRecord를 소스Record로 설정하는 TaskRecordFLAG 가 설정되어 있으면ACTIVITY_NEW_TASK,task의affinity,intent,ComponentName 등에 따라TaskRecord가 적합한지 찾기
이 작업의 해석은ActivityStack에 있습니다.Java의 startActivityUncheckedLocked 함수에서 수행됩니다.
이 내용에 흥미가 있습니까?
현재 기사가 여러분의 문제를 해결하지 못하는 경우 AI 엔진은 머신러닝 분석(스마트 모델이 방금 만들어져 부정확한 경우가 있을 수 있음)을 통해 가장 유사한 기사를 추천합니다:
Bitrise에서 배포 어플리케이션 설정 테스트하기이 글은 Bitrise 광고 달력의 23일째 글입니다. 자체 또는 당사 등에서 Bitrise 구축 서비스를 사용합니다. 그나저나 며칠 전 Bitrise User Group Meetup #3에서 아래 슬라이드를 발표했...
텍스트를 자유롭게 공유하거나 복사할 수 있습니다.하지만 이 문서의 URL은 참조 URL로 남겨 두십시오.
CC BY-SA 2.5, CC BY-SA 3.0 및 CC BY-SA 4.0에 따라 라이센스가 부여됩니다.