귀하의 onCreate()
방법에는 몇 가지 큰 결함이 있습니다.
1) 활동을 onCreate
준비 합니다- 이 방법이 완료 될 때까지 여기에서 수행하는 작업 은 사용자에게 표시 되지 않습니다 ! 예를 들어 , 마지막 변경 사항 만 그려져 사용자에게 표시되므로 TextView
여기서의 텍스트를 한 번 이상 변경할 수 없습니다!
2) Android 프로그램은 기본적으로 하나의 스레드에서만 실행 됩니다. 따라서 UI를 담당하는 주 스레드 Thread.sleep()
또는 사용하지 마십시오 Thread.wait()
! ( 자세한 내용은 "앱 반응 형 유지" 를 참조하십시오!)
무엇 당신의 초기화 하여 활동의가하는 것은 :
- 이유없이 새
TextView
개체 를 만듭니다 t
!
- 나중에
TextView
변수에서 레이아웃을 선택합니다 t
.
- 당신은 텍스트를 설정합니다
t
(하지만 명심하십시오 : 그것은 완료되고 응용 프로그램의 메인 이벤트 루프가 실행 된 후에 만 표시 onCreate()
됩니다!)
- 메서드 내 에서 10 초 동안 기다립니다. 모든 UI 활동을 중지하고 ANR을 강제로 강제 하므로 절대로 수행해서는 안됩니다 (응용 프로그램이 응답하지 않음, 위 링크 참조).
onCreate
- 그런 다음 다른 텍스트를 설정합니다.이 텍스트는
onCreate()
메서드가 완료되고 다른 여러 활동 수명주기 메서드가 처리 되는 즉시 표시됩니다 !
해결책:
텍스트를 한 번만 설정하십시오 onCreate()
. 표시되어야하는 첫 번째 텍스트 여야합니다.
만들기 Runnable
및Handler
private final Runnable mUpdateUITimerTask = new Runnable() {
public void run() {
// do whatever you want to change here, like:
t.setText("Second text to display!");
}
};
private final Handler mHandler = new Handler();
이 실행 파일을 가능한 핸들러로 설치하십시오 onCreate()
(하지만 아래 조언을 읽으십시오).
// run the mUpdateUITimerTask's run() method in 10 seconds from now
mHandler.postDelayed(mUpdateUITimerTask, 10 * 1000);
조언 : Activity
의 수명주기 를 알고 있어야합니다 ! 당신이 그런 일을한다면 onCreate()
이것은 당신 Activity
이 처음 생성 되었을 때만 일어날 것 입니다 ! Android는 Activity
눈에 보이지 않더라도 더 오랜 시간 동안 살아남을 수 있습니다! 사용자가 다시 "시작"하면-여전히 존재하며-더 이상 첫 번째 텍스트를 볼 수 없습니다!
=> 항상 핸들러를 설치 onResume()
하고 비활성화하십시오 onPause()
! 그렇지 않으면 귀하 Activity
가 전혀 보이지 않을 때 "업데이트"를 받게됩니다 ! 귀하의 경우 다시 활성화되었을 때 첫 번째 텍스트를 다시 보려면 !가 onResume()
아니라 에서 설정해야합니다 onCreate()
.
.setText()
는 전체 "위젯"이 설정하라는 텍스트로 대체 되기 때문 입니다. 이미 거기에 넣은 텍스트를 포함합니다.