Activity起動モード記録
2279 ワード
Android:launchMode="standard":この起動モードでは、startActivity()ごとに、メモリに新しいインスタンスが作成されます.
Android:launchMode="singleTop":スタックの先端にactivityの参照が存在する場合、もう一度startActivity()はonCreateで新しいインスタンスを作成するのではなく、存在するインスタンスを多重化してonNewIntent()メソッドを呼び出します.
Android:launchMode="singleTask":スタック全体にactivityの参照が存在する限り、もう一度startActivity()はonCreateで新しいインスタンスを作成するのではなく、存在するインスタンスを多重化してonNewIntent()メソッドを呼び出します.
Android:launchMode="singleInstance":最初に作成すると、タスクスタックが別に開き、新しいスタックには参照が1つしか存在しません.もう一度startActivity()はonCreateではなく、存在するインスタンスを多重化してonNewIntent()メソッドを呼び出します.
startActivity ForResult()の方法を見てみましょう:(親測)
プレゼンテーション:A startActivity ForResult()がBを開き、Bがデータを返します.
以上、自分のActivityでシステムカメラを開き、データを返す必要がある場合は、自分のactivityをsingleInstanceに設定しないでください.singleInstanceでなければ、onActivity Result方式で戻りデータを取得できません.写真を保存した後、SDカードから画像を取得できます.
setResult()メソッドはonPause、onDestory()では無効です.他のライフサイクルメソッドでは有効です.
戻るキーを押すたびにonDestory()が呼び出されます.
これを呼び出します.finish()は、自動的にonDestory()を呼び出します.
通知クリック、転送されたintent値は、ターゲットActivityに入るとonNewIntent()メソッドが呼び出されます.このactivityがsingleInstanceでない限り、intentバンドの値は取得できます.
目標activity
Android:launchMode="singleTop":スタックの先端にactivityの参照が存在する場合、もう一度startActivity()はonCreateで新しいインスタンスを作成するのではなく、存在するインスタンスを多重化してonNewIntent()メソッドを呼び出します.
Android:launchMode="singleTask":スタック全体にactivityの参照が存在する限り、もう一度startActivity()はonCreateで新しいインスタンスを作成するのではなく、存在するインスタンスを多重化してonNewIntent()メソッドを呼び出します.
Android:launchMode="singleInstance":最初に作成すると、タスクスタックが別に開き、新しいスタックには参照が1つしか存在しません.もう一度startActivity()はonCreateではなく、存在するインスタンスを多重化してonNewIntent()メソッドを呼び出します.
startActivity ForResult()の方法を見てみましょう:(親測)
プレゼンテーション:A startActivity ForResult()がBを開き、Bがデータを返します.
A standard
B singleTask、singleInstance, ;A startActivityForResult() B , A onActivityResult(); B ( )
B singleTop standard 。
A singleTop
A singleTask
A singleInstance,
以上、自分のActivityでシステムカメラを開き、データを返す必要がある場合は、自分のactivityをsingleInstanceに設定しないでください.singleInstanceでなければ、onActivity Result方式で戻りデータを取得できません.写真を保存した後、SDカードから画像を取得できます.
setResult()メソッドはonPause、onDestory()では無効です.他のライフサイクルメソッドでは有効です.
戻るキーを押すたびにonDestory()が呼び出されます.
これを呼び出します.finish()は、自動的にonDestory()を呼び出します.
通知クリック、転送されたintent値は、ターゲットActivityに入るとonNewIntent()メソッドが呼び出されます.このactivityがsingleInstanceでない限り、intentバンドの値は取得できます.
Intent intent = new Intent(ctx, MainActivity.class);
intent.putExtra("time", time);
intent.setFlags(Intent.FLAG_ACTIVITY_NEW_TASK);
PendingIntent contentIntent = PendingIntent.getActivity(ctx, 0,
intent, 0);
目標activity
@Override
protected void onNewIntent(Intent intent) {
super.onNewIntent(intent);
Logger.d(TAG, "MainActivity onNewIntent");
String time = intent.getStringExtra("time");
Logger.d(TAG, "onNewIntent time: "+time);
if(!TextUtils.isEmpty(time)){
Logger.d(TAG, "time: "+time);
//
mTabHost.setCurrentTab(0);
rb_main_data.setChecked(true);
//
PushMsgDao dao = new PushMsgDao(this);
SystemMessage systemMessage = dao.findMsgByTime(time);
dao.setReaded(systemMessage.getId());
}else{
Logger.d(TAG, " ");
}
}