Activity 传值之onNewIntent 的使⽤
⼀、onNewIntent()
在IntentActivity中重写下列⽅法:onCreate onStart onRestart onResume onPause onStop onDestroy onNewIntent
1、其他应⽤发Intent,执⾏下列⽅法:
onCreate
onStart
onResume
发Intent的⽅法:
2、接收Intent声明:
3、如果IntentActivity处于任务栈的顶端,也就是说之前打开过的,现在处于onPause、onStop 状态的话,其他应⽤再发送Intent的话,执⾏顺序为:
onNewIntent,onRestart,onStart,onResume。
在Android应⽤程序开发的时候,从⼀个Activity启动另⼀个Activity并传递⼀些数据到新的Activity上⾮常简单,但是当您需要让后台运⾏的Activity回到前台并传递⼀些数据可能就会存在⼀点点⼩问题。
⾸先,在默认情况下,当您通过Intent启到⼀个Activity的时候,就算已经存在⼀个相同的正在运⾏的Activity,系统都会创建⼀个新的Activity实例并显⽰出来。为了不让Activity实例化多次,我们需要通过在l配置activity的加载⽅式(launchMode)以实现单任务模式,如下所⽰:
launchMode为singleTask的时候,通过Intent启到⼀个Activity,如果系统已经存在⼀个实例,系统就会将请求发送到这个实例上,但这个时候,系统就不会再调⽤通常情况下我们处理请求数据的onCreate⽅法,⽽是调⽤onNewIntent⽅法,如下所⽰:
不要忘记,系统可能会随时杀掉后台运⾏的 Activity ,如果这⼀切发⽣,那么系统就会调⽤ onCreate ⽅法,⽽不调⽤ onNewIntent ⽅法,⼀个好的解决⽅法就是在 onCreate 和 onNewIntent ⽅法中调⽤同⼀个处理数据的⽅法,如下所⽰:Uri uri = Uri .parse ("philn://blog.163");Intent it = new Intent(Intent .ACTION _VIEW, uri);    startActivity(it);
1
2安卓intent用法
3<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 >
1
2
3
4
5
6
7
8
9<activity  android:label ="@string/app_name" android:launchmode ="singleTask"android:name="Activity1"></activity >
1protected  void  onNewIntent (Intent intent) {  super .onNewIntent(intent);  setIntent(intent);//must store the new intent unless getIntent() will return the old one  processExtraData();}
1
2
3
4
5
6
7
8
9
⼆、onNewIntent()的setIntent()和getIntent()
如果没有调⽤setIntent(intent),则getIntent()获取的数据将不是你所期望的。但是使⽤InXxx,貌似可以获得正确的结果。注意这句话:
Note that getIntent() still returns the original Intent. You can use setIntent(Intent) to update it to this new Intent.所以最好是调⽤setIntent(intent),这样在使⽤getIntent()的时候就不会有问题了。public  void  onCreate (Bundle savedInstanceState) {  super .onCreate(savedInstanceState);  setContentView(R.layout.main);  processExtraData();}
1
2
3
4
5
6
7
8
9protected  void  onNewIntent (Intent intent) {  super .onNewIntent(intent);  setIntent(intent);//must store the new intent unless getIntent() will return the old one  processExtraData()}
1
2
3
4
5
6
7
89private  void  processExtraData (){  Intent intent = getIntent();  //use the data received here }
1
2
3
4
5
6
7@Override protected  void  onNewIntent (Intent intent) {    super .onNewIntent(intent);    // setIntent(intent);    int  data = getIntent().getIntExtra("HAHA", 0);    // int data = IntExtra("HAHA", 0);}
1
2
3
4
5
6
7
8
9

版权声明:本站内容均来自互联网,仅供演示用,请勿用于商业和其他非法用途。如果侵犯了您的权益请与我们联系QQ:729038198,我们将在24小时内删除。