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小时内删除。
发表评论