一、onNewIntent()

IntentActivity中重写下列方法:onCreate onStart onRestart  onResume  onPause onStop onDestroy  onNewIntent


1、其他应用发Intent,执行下列方法:
onCreate
onStart
onResume

Intent的方法:

Uri uri = Uri.parse("philn://blog.163.com");Intent it = new Intent(Intent.ACTION_VIEW, uri);    startActivity(it);

2、接收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>

3、如果IntentActivity处于任务栈的顶端,也就是说之前打开过的Activity,现在处于onPause、onStop 状态的话,其他应用再发送Intent的话,执行顺序为:
onNewIntent,onRestart,onStart,onResume。

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>


launchModesingleTask的时候,通过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);//must store the new intent unless getIntent() will return the old one  processExtraData()}
private void processExtraData(){  Intent intent = getIntent();  //use the data received here}

  

二、onNewIntent()的setIntent()和getIntent()

@Overrideprotected 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()的时候就不会有问题了。

更多相关文章

  1. android 事务
  2. android调用系统联系人列表
  3. Android(安卓)读取文件内容
  4. js 判断手机操作系统(ios或Android)
  5. Android(安卓)开发过程网络相关问题
  6. Android之SharedPreferences数据保存
  7. centos7中安装Android(安卓)SDK的方法步骤
  8. Android(安卓)3.0动画系统详解
  9. 【Android】BroadCastReceiver 简介

随机推荐

  1. 【Android】监听Notification被清除
  2. Android如何使用OKHttp
  3. android 连接网络
  4. android 定时关机
  5. PreferenceActivity使用方法
  6. Android——java.lang.UnsatisfiedLinkEr
  7. Android 中Activity 之间传递参数
  8. Android 调用camera2 人脸识别api
  9. Android TabHost 文字及图片的设置
  10. Android仿微信5实现滑动导航条