3 가지 활동이 포함 된 매우 간단한 프로젝트를 만들었습니다.
활동 1 버튼이 활동 2로 이동할 수 있습니다
활동 2 버튼 3 활동으로 갈 수 있습니다
활동 3에 버튼이 충돌했습니다
충돌 버튼에
throw exception
를 설정하려고합니다.
buttonCrash.setOnclickListener (new View.OnClickListener() {
@Override
public void onClick(View v){
throw new NullPointerException();
}
});
크래시 후 다시 열기를 클릭하면 액티비티가 액티비티 2로 돌아갑니다. 앱이 다시 시작되거나 액티비티 스택을 지우는 방법은 무엇입니까?
핸들 예외 클래스를 만들려고합니다 :
public class MyExceptionHandler implements Thread.UncaughtExceptionHandler {
private Activity activity;
public MyExceptionHandler(Activity a) {
activity = a;
}
@Override
public void uncaughtException(Thread thread, Throwable ex) {
Intent intent = new Intent(activity, MainActivity.class);
intent.putExtra("crash", true);
intent.addFlags(Intent.FLAG_ACTIVITY_CLEAR_TOP
| Intent.FLAG_ACTIVITY_CLEAR_TASK
| Intent.FLAG_ACTIVITY_NEW_TASK);
PendingIntent pendingIntent = PendingIntent.getActivity(MyApplication.getInstance().getBaseContext(), 0, intent, PendingIntent.FLAG_ONE_SHOT);
AlarmManager mgr = (AlarmManager) MyApplication.getInstance().getBaseContext().getSystemService(Context.ALARM_SERVICE);
mgr.set(AlarmManager.RTC, System.currentTimeMillis() + 100, pendingIntent);
activity.finish();
System.exit(2);
}
}
그러나 충돌 대화 상자를 먼저 표시해야하지만 다시 열기를 클릭하여 다시 열 수 있지만 앱이 갑자기 다시 시작됩니다.
- 답변 # 1
- 답변 # 2
모든 활동 전환시 활동 지우기 작업 플래그 추가
Intent intent = new Intent(this,yourclass.class); intent.setFlags(Intent.FLAG_ACTIVITY_CLEAR_TOP | Intent.FLAG_ACTIVITY_SINGLE_TOP); startActivity(intent);
- 답변 # 3
두 번째 활동에 finish () 함수 추가
- 답변 # 4
활동 1 통과 확인 사용
public static boolean DOING_PASS = false;
세트 DOING_PASS
onStart
내에서 사실입니다activity 1
에서@Override void onStart(){ DOING_PASS = true; }
onCreate
내부의 활동 1을 제외한 모든 활동을 확인할 수 있습니다.if(Activity1.DOING_PASS){ // do normal } else{ Intent i = new Intent(this, Activity1.class); i.addFlags(Intent.FLAG_ACTIVITY_CLEAR_TOP || Intent.FLAG_ACTIVITY_CLEAR_TASK || Intent.FLAG_ACTIVITY_NEW_TASK); startActivity(i); }
관련 자료
- android - 성공적인 핸드 쉐이킹 후 클라이언트가 Close Notify를 보내는 이유는 무엇입니까?
- flutter - 상태가 변경된 후 위젯을 강제로 다시 생성하는 방법은 무엇입니까?
- git 리포지토리를 만든 후 첫 번째 커밋을 수행하는 방법
- node.js - 첫 메시지 후 봇이 너무 느리게 응답
- mysql - 사용자 로그 테이블을 사용자의 첫 번째, 마지막 및 이전 활동에 매핑하는 SQL 쿼리
- node.js - 결과를 삽입 한 후 DB를 닫으려면 MongoDB 가져 오기 스크립트를 어떻게 얻습니까?
- awk - bash로 다른 문자열이 처음 나타난 후 문자열이 처음 나오는 것을 찾으십시오
- jquery - 드루팔 8 대화 후 뭔가를하세요 닫기
- android - 새로운 의도를 시작한 후 이전 활동은 어떻게됩니까?
- ansible - 스크립트를 처음 실행할 때 작업을 실행하지만 그 후에는 실행하지 않습니다
- c++ - 두 개의 for 루프 중 처음에 초기화를 제거하는 방법은 무엇입니까?
- c# - 처음 실행 한 후 PXSmartPanel에 올바른 데이터가 표시되지 않는 이유는 무엇입니까?
- python - 목록에서 두 요소를 바꾸려고하는데 첫 번째 스왑 후 교체 할 조건에 맞기 때문에 계속 교체됩니다
- javascript - 내 내부 루프가 처음 이후 건너 뛰는 이유는 무엇입니까?
- javascript - 메뉴의 링크를 클릭 한 후 메뉴를 닫도록하려면 어떻게해야합니까?
- windows 10 - 처음 부팅 할 때 PC 블루 스크린이 나타나는 이유는 무엇입니까?
- javascript - 이미지가 처음에는 완전히로드되지 않고 새로 고침 후에 만로드됩니다
- bash - 문자열에서 처음 N 개의 문자 뒤에 하이픈을 추가하고 #로 시작하는 문자열 부분도 제거합니다
- html - 자바 스크립트의 첫 번째 줄 이후에 출력을 지우는 방법
- javascript - 숫자와 마침표 뒤의 첫 번째 숫자에 대한 정규식
시도는 기본 활동 홈과 기본값을 정의하십시오. 매니페스트의 활동에서 인 텐트 필터에 아래 코드를 추가하십시오.