【转】 onNewIntent调用时机
onNewIntent調(diào)用時機
在IntentActivity中重寫下列方法:onCreate onStart onRestart?
onResume? onPause onStop onDestroy?
onNewIntent
一、其他應用發(fā)Intent,執(zhí)行下列方法:
I/@@@philn(12410):
onCreate
I/@@@philn(12410):
onStart
I/@@@philn(12410):
onResume
發(fā)Intent的方法:
Uri
uri = Uri.parse("philn://blog.163.com");
Intent it = new
Intent(Intent.ACTION_VIEW, uri);???
startActivity(it);
二、接收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,現(xiàn)在處于
I/@@@philn(12410):
onPause
I/@@@philn(12410): onStop
狀態(tài)的話
其他應用再發(fā)送Intent的話,執(zhí)行順序為:
I/@@@philn(12410):
onNewIntent
I/@@@philn(12410):
onRestart
I/@@@philn(12410):
onStart
I/@@@philn(12410): onResume
在Android應用程序開發(fā)的時候,從一個Activity啟動另一個Activity并傳遞一些數(shù)據(jù)到新的Activity上非常簡單,但是當您需要讓后臺運行的Activity回到前臺并傳遞一些數(shù)據(jù)可能就會存在一點點小問題。
首先,在默認情況下,當您通過Intent啟到一個Activity的時候,就算已經(jīng)存在一個相同的正在運行的Activity,系統(tǒng)都會創(chuàng)建一個新的Activity實例并顯示出來。為了不讓Activity實例化多次,我們需要通過在AndroidManifest.xml配置activity的加載方式(launchMode)以實現(xiàn)單任務模式,如下所示:
1 <activity
android:label="@string/app_name"
android:launchmode="singleTask"android:name="Activity1">
2 </activity>
launchMode為singleTask的時候,通過Intent啟到一個Activity,如果系統(tǒng)已經(jīng)存在一個實例,系統(tǒng)就會將請求發(fā)送到這個實例上,但這個時候,系統(tǒng)就不會再調(diào)用通常情況下我們處理請求數(shù)據(jù)的onCreate方法,而是調(diào)用onNewIntent方法,如下所示:
1 protected void
onNewIntent(Intent intent) {
2??
super.onNewIntent(intent);
3??
setIntent(intent);//must store the new intent unless getIntent() will return the
old one
4??
processExtraData();
5 }
不要忘記,系統(tǒng)可能會隨時殺掉后臺運行的Activity,如果這一切發(fā)生,那么系統(tǒng)就會調(diào)用onCreate方法,而不調(diào)用onNewIntent方法,一個好的解決方法就是在onCreate和onNewIntent方法中調(diào)用同一個處理數(shù)據(jù)的方法,如下所示:
01 public void
onCreate(Bundle savedInstanceState) {
02??
super.onCreate(savedInstanceState);
03??
setContentView(R.layout.main);
04??
processExtraData();
05 }
06??
07 protected void
onNewIntent(Intent intent) {
08??
super.onNewIntent(intent);
09??
setIntent(intent);//must store the new intent unless getIntent() will return the
old one
10??
processExtraData()
11 }
12??
13 private void
processExtraData(){
14?? Intent intent =
getIntent();
15?? //use the data
received here
16 }
轉(zhuǎn)載于:https://www.cnblogs.com/Jessy/archive/2012/01/16/2323390.html
總結
以上是生活随笔為你收集整理的【转】 onNewIntent调用时机的全部內(nèi)容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: ADO.NET的记忆碎片(六)
- 下一篇: String对象中常用的方法