왜 이런 일이 발생하는지 알고 있습니다.runOnUiThread가 화면을 회전시킬 때 응용 프로그램을 죽입니다.
화면을 회전하면 활동이 파괴되고 다시 생성되며 runOnUiThread()
메소드가 더 이상 유효하지 않은 이전 (파괴 된) 활동을 참조하므로 안드로이드가 runtimeexception
을 던졌습니다.
@ContentView(R.layout.activity_start)
public class StartActivity extends RoboSherlockFragmentActivity {
@Inject
private EventManager eventManager;
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
if (savedInstanceState == null) {
Fragment newFragment = new WelcomeFragment();
FragmentTransaction ft = getSupportFragmentManager().beginTransaction();
ft.replace(R.id.fragment_container, newFragment).commit();
new Thread(new Runnable() {
@Override
public void run() {
try {
Thread.sleep(2000);
//Do some short initialization here like read shared prefs
//and then decide for example whether to login or skip the login
//If the rotation happens while sleeping the app will certainly crash
runOnUiThread(new Runnable() {
@Override
public void run() {
addFragmentToStack();
}
});
} catch (Exception e) {
// TODO: handle exception
}
}
}).start();
}
}
void addFragmentToStack() {
Fragment newFragment = new LoginOrRegisterFragment();
FragmentTransaction ft = getSupportFragmentManager().beginTransaction();
ft.replace(R.id.fragment_container, newFragment);
ft.setTransition(FragmentTransaction.TRANSIT_FRAGMENT_OPEN);
ft.commit();
}
}
내가 같은 몇 가지 쉬운 일에 대한 asynctask
을 사용해야합니까 :