<一>Activity的任务与回退栈 必须掌握
1.Task与BackSatck
一个Task 就是一组activity的集合。这些activity按照它们打开的顺序被放置于一个先进后出的栈中(back stack)。
<二> .Activity加载模式
standard |
Android 系统默认的模式,启动Activity,都会新建一个activity的实例,并把自己放到栈的最上面 |
||
singleTop |
被启动的activity如果和当前位于栈顶的activity相同(同一个类)的话,它不会产生实例 而是会调用onNewIntent()函数。 如果被启动的activity不和当前位于栈顶的activity相同,便会产生新的activity的实例并将其位于栈顶 |
||
singleTask |
|
||
singleInstance |
加载该Activity时如果没有实例化,他会创建新的Task后,实例化入栈, 如果已经存在,直接调用 onNewIntent, 该Activity的Task中不允许存在其它的Activity, 任何从该Activity启动的其他Activity都将被放到其他task中, |
1. onNewIntent()
在各种加载模式中,由于加载模式的原因,要启动的Activity没有启动,而是使用之前已经创建的Activity
这种情况下,Activity会调用onNewIntent()方法
Intent mIntent; /** Return the intent that started this activity. */ public Intent getIntent() { return mIntent; } public void setIntent(Intent newIntent) { mIntent = newIntent; } |
//intent The new intent that was started for the activity. @Override protected void onNewIntent(Intent intent) { super.onNewIntent(intent); String extra = getIntent().getStringExtra("key");
text.setText(intent.getStringExtra("key")); }
@Override public boolean onTouchEvent(MotionEvent event) { switch (event.getAction()) { case MotionEvent.ACTION_UP: Intent i = new Intent(this, SingleTopActivity.class); i.putExtra("key", "value"); // setIntent(i); startActivity(i); break; } return super.onTouchEvent(event); } |