2016-11-25 6 views
0

を開始したのであればActivityAがあるとします。活動の制御フロー新しいアクティビティが

@Override 
protected void onCreate(Bundle savedInstanceState) { 

    if (AndroidUtils.isDeviceRooted()) { 
     Intent i = new Intent(this, ActivityB.class); 
     i.addFlags(Intent.FLAG_ACTIVITY_SINGLE_TOP); 
     startActivity(i); 
    } 

    .... 
    // other code of onCreate() 
} 

私はstartActivity()は非同期で、新しいが開始された後、現在の活動が終了したという事実を認識しています。この場合、 "onCreate()"の他のコードの一部が実行されます。

EDIT:答えは、startActivity()の後にコードを実行しないでください。onCreate()finish()またはreturnまたはその両方を呼び出します。

答えて

1

はい、あなたは絶対に正しいです。しかし、あなたのonCreateのすべてのコードが呼び出されるわけではありません。

あなたの活動の両方の流れになります後

あなたはActivityA方法はActivityAのonStop()が続くと呼ばれているの後、onPause()をActivityBするActivityAから移動し、今までにすると、メソッドのonCreate()のActivityBが呼び出された後、ActivityBのonStart()、次にActivityBのonResume()が呼び出されます。 ActivityBのバックキー

onPause()を押すことにより、バックActivityAのにナビゲートするとき

またActivityBのonStop()、続いて呼び出され、次いで、前記第一の活性のActivityAのonRestart()は、続いて呼び出されActivityAのonStart()、次にActivityAのonResume()を呼び出します。

しかし、あなたがonResumeと呼ばれる前にActivityAからナビゲートすると、onPauseはActivityBに対して呼び出されません。

1

次の回答は、onCreate()で startActivity()の後にコードを実行しない方法ですか? finish()またはreturnまたは の両方を呼び出します。

アクティビティが作成されるとondestroyはすぐ とonpauseonStopなどと呼ばれるfinish()を呼び出す場合

boolean isRooted; 
@Override 
protected void onCreate(Bundle savedInstanceState) { 

isRooted=AndroidUtils.isDeviceRooted(); 

if (isRooted) { 
    Intent i = new Intent(this, ActivityB.class); 
    i.addFlags(Intent.FLAG_ACTIVITY_SINGLE_TOP); 
    startActivity(i); 
    finish(); 
}else{ 
    .... 
    // other code of onCreate() 
} 

} 
をスキップされます
関連する問題