15.Activit的几个重要属性总结?android
12.onNewIntent()使用Tips?
11.launchMode的属性介绍?及其经常使用的Intent Flag?app
====less
15.Activit的几个重要属性总结?
1.Activity的affinity(亲和力)
2.Intent几种常见的flags
3.<activity>与task相关属性
launchMode:
taskAffinity:
Activity的task相关属性?
allowTaskReparenting:
alwaysRetainTaskState:
clearTaskOnLaunch:
finishOnTaskLaunch:
documentLaunchMode:ide
12.onNewIntent()使用Tips?this
1. 方法体中需手动调用setIntent(intent),不然以后的getIntent()获取的都是旧的intent对象;
2. 被onNewIntent方式打开的activity,对生命周期的影响.
1. 以前activity是resume状态,onNewIntent()后只会调用onResume()方法
2. 不然按照 `onNewIntent->onRestart->onStart->onResume->.xml
在IntentActivity中重写下列方法:onCreate onStart onRestart onResume onPause onStop onDestroy onNewIntent
一、其余应用发Intent,执行下列方法:
onCreate
onStart
onResume对象
二、接收Intent声明:
<activity android:name=".IntentActivity" android:launchMode="singleTask"
android:label="@string/testname">
<intent-filter>
<action android:name="android.intent.action.VIEW" />
<category android:name="android.intent.category.DEFAULT" />
<category android:name="android.intent.category.BROWSABLE" />
<data android:scheme="philn"/>
</intent-filter>
</activity>生命周期
三、若是IntentActivity处于任务栈的顶端,也就是说以前打开过的Activity,如今处于onPause、onStop状态的话,其余应用再发送Intent的话,执行顺序为:
onNewIntent,onRestart,onStart,onResume。ip
在Android应用程序开发的时候,从一个Activity启动另外一个Activity并传递一些数据到新的Activity上很是简单,可是当您须要让后台运行的Activity回到前台并传递一些数据可能就会存在一点点小问题。开发
首先,在默认状况下,当您经过Intent启到一个Activity的时候,就算已经存在一个相同的正在运行的Activity,系统都会建立一个新的Activity实例并显示出来。为了避免让Activity实例化屡次,咱们须要经过在AndroidManifest.xml配置activity的加载方式(launchMode)以实现单任务模式,以下所示:
<activity android:label="@string/app_name" android:launchmode="singleTask"android:name="Activity1"></activity>
launchMode为singleTask的时候,经过Intent启到一个Activity,若是系统已经存在一个实例,系统就会将请求发送到这个实例上,但这个时候,系统就不会再调用一般状况下咱们处理请求数据的onCreate方法,而是调用onNewIntent方法,以下所示:
protected void onNewIntent(Intent intent) {
super.onNewIntent(intent);
setIntent(intent);//must store the new intent unless getIntent() will return the old one
processExtraData();
}
不要忘记,系统可能会随时杀掉后台运行的 Activity ,若是这一切发生,那么系统就会调用 onCreate 方法,而不调用 onNewIntent 方法,一个好的解决方法就是在 onCreate 和 onNewIntent 方法中调用同一个处理数据的方法,以下所示:
public void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.main);
processExtraData();
}
protected void onNewIntent(Intent intent) {
super.onNewIntent(intent);
setIntent(intent);
processExtraData()
}
private void processExtraData(){
Intent intent = getIntent();
//use the data received here
}
2、onNewIntent()的setIntent()和getIntent()
@Override
protected void onNewIntent(Intent intent) {
super.onNewIntent(intent);
// setIntent(intent);
int data = getIntent().getIntExtra("HAHA", 0);
// int data = intent.getIntExtra("HAHA", 0);
}
若是没有调用setIntent(intent),则getIntent()获取的数据将不是你所指望的。可是使用intent.getInXxx,貌似能够得到正确的结果。
注意这句话:
Note that getIntent() still returns the original Intent. You can use setIntent(Intent) to update it to this new Intent.
因此最好是调用setIntent(intent),这样在使用getIntent()的时候就不会有问题了。
11.launchMode的属性介绍?及其经常使用的Intent Flag?
什么是Activity的启动模式(LaunchMode)
启动模式简单地说就是Activity启动时的策略,在AndroidManifest.xml中的标签的android:launchMode属性设置
启动模式有4种,分别为standard、singleTop、singleTask、singleInstance;这四种模式影响了Activity所在的任务栈.
Intent.setFlag(int flags)方法传递的一个整形的数据,被Android系统设置为了常量:FLAG_ACTIVITY_NEW_TASK:这个标识会使新启动的Activity独立建立一个Task。FLAG_ACTIVITY_CLEAR_TOP:这个标识会使新启动的Activity检查是否存在于Task中,若是存在则清除其之上的Activity,使它得到焦点,并不从新实例化一个Activity,通常结合FLAG_ACTIVITY_NEW_TASK一块儿使用。FLAG_ACTIVITY_SINGLE_TOP:等同于在LauncherMode属性设置为singleTop。