当前位置: 移动技术网 > IT编程>移动开发>Android > Android onNewIntent()触发机制及注意事项

Android onNewIntent()触发机制及注意事项

2019年07月24日  | 移动技术网IT编程  | 我要评论

苦茶简谱,强心脏121211,重生轮回眼传说txt

一、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>

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);//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()

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

以上就是对android onnewintent()触发机制及注意事项 的资料整理,后续继续补充相关资料,谢谢大家对本站的支持!

如对本文有疑问,请在下面进行留言讨论,广大热心网友会与你互动!! 点击进行留言回复

相关文章:

验证码:
移动技术网