當前位置:首頁 » 安卓系統 » android啟動activity的方式

android啟動activity的方式

發布時間: 2022-06-26 10:07:38

⑴ Android開發,activity的默認啟動模式為標准啟動模式,什麼時候會用到其他的啟動模式

啟動模式簡單地說就是Activity啟動時的策略,在AndroidManifest.xml中的標簽的android:launchMode屬性設置;
啟動模式有4種,分別為standard、singleTop、singleTask、singleInstance;
講解啟動模式之前,有必要先了解一下「任務棧」的概念;
一 :
standard 模式:這個就沒有什麼好說的了,Android默認Activity啟動的模式 就是 standard,如果有3個 Activity,Act1,Act2,Act3, 如果從Act1 啟動到Act2 ,在啟動到Act3,那麼Android 的任務棧(task stack)分別為 Act1、Act2、Act3,Act3 在棧頂,如果此時按手機返回鍵,則需要返回3次才能返回到桌面(假設是從桌面啟動的demo),任務棧分銷毀掉 Act3,Act2,最後Act1 。
二 :singleTop模式:
實驗效果:
singleTop模式:該啟動模式和standard模式相差不多,任務棧分配也很相似,如:現有 act1,act 2,在act2 清單文件中配置 android:launchMode="singleTop" ,其他都是默認standard 模式, 若從桌面啟動該實驗demo,從act 1,到act2 ,那麼任務棧則分配為,act1,act2,此時該任務棧和 standard 模式任務棧分配則完全相同,接下來則說明不同的地方,如果在act2 界面中 啟動 到act1, 此時的 任務棧 情況則為 act1,act2,act1,在由act1 啟動到act2,在啟動到act2,進行多次啟動,(在act2界面)任務棧的情況則為,act1,act2,act1,act2,棧頂的act2 則不會重新創建,則會復用act2 該 Activit, 依次類推。
理論知識:
singleTop,如果任務棧的棧頂元素是要被激活的組件,不會創建新的Activity放在任務棧,而是會復用棧頂的Activity。 如果發現棧頂的元素不是要激活的Activity,就會創建新的Activity 放置到任務棧裡面
singleTop模式應用場景 :
App程序中(或瀏覽器中)保存的書簽,假如用戶看到一個界面保存自己喜歡的標簽,假如要保存10個,這個時候用戶在返回鍵的時候,則會返回10次才能返回到App應用中, Android下singleTop 則解決該問題。
三singleTask 模式 :
實驗效果 相差不大,實驗內容就不多說了,自己可以寫個小demo,兩個Activity,每個Activiy 有兩個button,可以相互啟動 打日誌去動手查看,會理解更加深刻,可以參照著 SingleTop模式去實驗,以下只是講解下 和SingleTop的區別:
區別如下:(理論知識)
SingleTask 操作模式,一般和singleTop操作模式類似,如果他發現任務棧裡面已經有了要啟動的這個Activity,他會清空這個Activity所在的任務棧上面的所有Activiy,然後直接復用這個已經存在的Activity 。
應用場景:
如果一個App中,有一個功能需要載入網頁內容 ,打開一個 browserActiviy現在網頁內容,則內存開銷非常大,首先要初始化webkit /c++ 嵌入式瀏覽器內核broweractivity 配置了singleTask,空間換時間,使用該模式可以節省內存開銷。
四 :singleinstance 模式 :
直接理論知識吧」:
singleInstance操作模式會新開啟一個任務棧,跟其他普通Activity不是 同一個任務棧,比較牛,他的模式流程是 首先要新開啟一個新的任務棧把要激活的Activity放置到新的 任務棧里,這個任務棧裡面只有且 只有一個實例,也比較極端吧。說比較極端也跟他的應用場景有關系。
應用場景 :
App各種詞典,向有道詞典,什麼金山詞典,說極端是因為不想被放置到同一個任務棧裡面,它是全局的系統程序應用,達到節省內存的使用目的。

⑵ 求Android根據activity class啟動Activity的方法

學習下這個網址裡面的,關於界面互調,對你應該會有所幫助:
http://m.oschina.net/bbs/thread/1566

⑶ Android NFC 如何啟動Activity

可以給所有的activity定義統一的一個action,然後搞一個acitivy,讓他來startpickeractivity,這樣,就會把所有的定義了action的activity列出來,讓用戶選擇

一開始啟動一個chooseActivity,在這裡面選,然後把選擇結果保存sp

以後進程序如果sp裡面有值就跳過chooseActivity

給個按鈕,可以重新呼出chooseActivity

最簡單的辦法

⑷ android 主activity用什麼啟動模式

在android里,有4種activity的啟動模式,分別為:
「standard」 (默認)
「singleTop」
「singleTask」
「singleInstance」

1. 如何決定所屬task
「standard」和」singleTop」的activity的目標task,和收到的Intent的發送者在同一個task內,除非intent包括參數FLAG_ACTIVITY_NEW_TASK。
如果提供了FLAG_ACTIVITY_NEW_TASK參數,會啟動到別的task里。
2. 是否允許多個實例
「standard」和」singleTop」可以被實例化多次,並且存在於不同的task中,且一個task可以包括一個activity的多個實例;
「singleTask」和」singleInstance」則限制只生成一個實例,並且是task的根元素。
singleTop要求如果創建intent的時候棧頂已經有要創建 的Activity的實例,則將intent發送給該實例,而不發送給新的實例。

3. 是否允許其它activity存在於本task內
「singleInstance」獨佔一個task,其它activity不能存在那個task里;如果它啟動了一個新的activity,不管新的activity的launch mode 如何,新的activity都將會到別的task里運行(如同加了FLAG_ACTIVITY_NEW_TASK參數)。
而另外三種模式,則可以和其它activity共存。

4. 是否每次都生成新實例
「standard」對於沒一個啟動Intent都會生成一個activity的新實例;
「singleTop」的activity如果在task的棧頂的話,則不生成新的該activity的實例,直接使用棧頂的實例,否則,生成該activity的實例。
比如現在task棧元素為A-B-C-D(D在棧頂),這時候給D發一個啟動intent,如果D是 「standard」的,則生成D的一個新實例,棧變為A-B-C-D-D。
如果D是singleTop的話,則不會生產D的新實例,棧狀態仍為A-B-C-D
如果這時候給B發Intent的話,不管B的launchmode是」standard」 還是 「singleTop」 ,都會生成B的新實例,棧狀態變為A-B-C-D-B。

「singleInstance」是其所在棧的唯一activity,它會每次都被重用。

「singleTask」如果在棧頂,則接受intent,否則,該intent會被丟棄,但是該task仍會回到前台。

當已經存在的activity實例處理新的intent時候,會調用onNewIntent()方法
如果收到intent生成一個activity實例,那麼用戶可以通過back鍵回到上一個狀態;如果是已經存在的一個activity來處理這個intent的話,用戶不能通過按back鍵返回到這之前的狀態。

總結如下:
standard 每次都會新建,每個Task都可以有,且每個Task都可以有多個實例(每個Task都可以有,且可以有多個)
singleTop 當前實例如果在棧頂,就不新建實例,調用其OnNewIntent。 如不在棧頂,則新建實例 (每個Task都可以有,且可以有多個,在棧頂時可復用)
singleTask 新建一個Task,如果已經有其他的Task並且包含該實例,那就直接調用那個Task的實例。(只有一個Task中會有)
singleInstance 新建一個Task,且在該Task中只有它的唯一一個實例。 (只有一個Task會有,且該Task中只有它)

FLAG_ACTIVITY_NEW_TASK 類似singleTask
FLAG_ACTIVITY_SINGLE_TOP 類似singleTop
FLAG_ACTIVITY_CLEAR_TOP 無對應

⑸ android activity怎麼更改啟動方式

Android總Activity的啟動模式分為四種:

Activity啟動模式設置(AndroidManifest文件):

<activity android:name=".MainActivity" android:launchMode="standard" />

Activity的四種啟動模式:

1. standard

模式啟動模式,每次激活Activity時都會創建Activity,並放入任務棧中。

2. singleTop

如果在任務的棧頂正好存在該Activity的實例, 就重用該實例,否者就會創建新的實例並放入棧頂(即使棧中已經存在該Activity實例,只要不在棧頂,都會創建實例)。

3. singleTask

如果在棧中已經有該Activity的實例,就重用該實例(會調用實例的onNewIntent())。重用時,會讓該實例回到棧頂,因此在它上面的實例將會被移除棧。如果棧中不存在該實例,將會創建新的實例放入棧中。

4. singleInstance

在一個新棧中創建該Activity實例,並讓多個應用共享改棧中的該Activity實例。一旦改模式的Activity的實例存在於某個棧中,任何應用再激活改Activity時都會重用該棧中的實例,其效果相當於多個應用程序共享一個應用,不管誰激活該Activity都會進入同一個應用中

⑹ android 怎麼獲取一個activity啟動模式

在Android中每個界面都是一個Activity,切換界面操作其實是多個不同Activity之間的實例化操作。在Android中Activity的啟動模式決定了Activity的啟動運行方式。
Android總Activity的啟動模式分為四種:

Activity啟動模式設置:

<activity android:name=".MainActivity" android:launchMode="standard" />

Activity的四種啟動模式:

1. standard

模式啟動模式,每次激活Activity時都會創建Activity,並放入任務棧中。

2. singleTop

如果在任務的棧頂正好存在該Activity的實例, 就重用該實例,否者就會創建新的實例並放入棧頂(即使棧中已經存在該Activity實例,只要不在棧頂,都會創建實例)。

3. singleTask

如果在棧中已經有該Activity的實例,就重用該實例(會調用實例的onNewIntent())。重用時,會讓該實例回到棧頂,因此在它上面的實例將會被移除棧。如果棧中不存在該實例,將會創建新的實例放入棧中。

4. singleInstance

在一個新棧中創建該Activity實例,並讓多個應用共享改棧中的該Activity實例。一旦改模式的Activity的實例存在於某個棧中,任何應用再激活改Activity時都會重用該棧中的實例,其效果相當於多個應用程序共享一個應用,不管誰激活該Activity都會進入同一個應用中。

其中standard是系統默認的啟動模式。

下面通過實例來演示standard的運行機制:

1 private TextView text_show;
2 private Button btn_mode;
3
4 @Override
5 public void onCreate(Bundle savedInstanceState) {
6 super.onCreate(savedInstanceState);
7 setContentView(R.layout.activity_main);
8
9 text_show = (TextView) this.findViewById(R.id.text_show);
10
11 text_show.setText(this.toString());
12
13 btn_mode = (Button) this.findViewById(R.id.btn_mode);
14
15 }
16
//按鈕單擊事件
17 public void LaunchStandard(View v){
18 startActivity(new Intent(this,MainActivity.class));
19
20 text_show.setText(this.toString());
21 }

⑺ android 不用startactivity 怎麼開啟activity的方法

啟動其他APK的Activity方法
有兩個app,分別叫做App1和App2。
App1包含兩個Activity,分別叫做App1_A和App1_B.其中App1_A是入口Activity.
也就是App1_A設置intent-filter,action為<action android:name="android.intent.action.MAIN" />
App2隻有一個Activity,叫做App2_A。
現在在App2_A中通過startActivity啟動App1_A是沒問題的.但是啟動App1_B的時候報了fc錯誤。
logcat如下:
08-03 02:23:44.119: WARN/ActivityManager(64): Permission denied: checkComponentPermission() reqUid=10030
08-03 02:23:44.119: WARN/ActivityManager(64): Permission Denial: starting Intent { act=android.intent.action.VIEW cmp=com.hello/.activity2 } from ProcessRecord{407c8bc8 665:com.fileExplorer/10032} (pid=665, uid=10032) requires null
用法如下:
Intent intent = new Intent();
ComponentName componentName = new ComponentName("com.hello","com.hello.App1_A");//這個沒問題
//ComponentName componentName = new ComponentName("com.hello","com.hello.App1_B");//這個報錯
intent.setComponent(componentName);
startActivity(intent);
解決方法:
(1)
通過隱式intent調用方法實現,需要在被調用的activity的manifest文件中添加
<intent-filter>
<action android:name="com.example.project.SHOW_ACTIVITY" />
<category android:name="android.intent.category.DEFAULT" />
</intent-filter>
在StartActivity(it)之前,設定該intent對應的action(com.example.project.SHOW_ACTIVITY)
Intent intent = new Intent();
intent.setAction(action);
intent.addFlags(Intent.FLAG_ACTIVITY_NEW_TASK);
context.startActivity(intent);推薦使用
利用setAction方法啟動Activity還有一個好處就是不需要知道包名和Activity類名,只需要知道action就可以隱式的啟動activity
(2)
即使直接指定了目標activity的ComponentName,跨應用的activity調用也要至少給目標activity指定一個帶action的filter。如:
<intent-filter>
<action android:name="" />
</intent-filter>
action name為空即可。
(3)給被調用的Activity增加一個帶action的filter,如下:
<intent-filter>
<action android:name="com.sdmc.ottplayer.uercenter" />
</intent-filter>
然後可以通過隱式Intent來調用,而不用使用intent.setComponent方法,如下就OK了(但是經過驗證,這種方法只是對APK的入口activity有用,對普通的沒用,和上面的問題一樣無法解決:啟動其他APK的非入口activity)
Intent i = new Intent("com.sdmc.ottplayer.uercenter");
i.setFlags(Intent.FLAG_ACTIVITY_NEW_TASK);
this.startActivity(intent);

異常處理:
Caused by: android.util.AndroidRuntimeException: Calling startActivity() from outside of an Activity context requires the FLAG_ACTIVITY_NEW_TASK flag. Is this really what you want?
Context中有一個startActivity方法,Activity繼承自Context,重載了startActivity方法。
如果使用 Activity的startActivity方法,不會有任何限制,
而如果使用Context的startActivity方法的話,就需要開啟一個新 的task,遇到上面那個異常的,都是因為使用了Context的startActivity方法。
解決辦法是,加一個flag。intent.addFlags(Intent.FLAG_ACTIVITY_NEW_TASK)
Intent intent = new Intent();
intent.setClass(mContext, VideoPlayer.class);
intent.addFlags(Intent.FLAG_ACTIVITY_NEW_TASK);
mContext.startActivity(intent);

⑻ 請使用文字描述activity有幾種+啟動模式,並說明這幾種模式+的特點和區別。

摘要 基於stm32貪吃蛇游戲

⑼ android 啟動 activity 是什麼意思

當應用運行起來後就會開啟一條線程,線程中會運行一個任務棧,當Activity實例創建後就會放入任務棧中。Activity啟動模式的設置在AndroidManifest.xml文件中,通過配置Activity的屬性android:launchMode=""設置。

1. Standard模式(默認)

我們平時直接創建的Activity都是這種模式的Activity,這種模式的Activity的特點是:只要你創建了Activity實例,一旦激活該Activity,則會向任務棧中加入新創建的實例,退出Activity則會在任務棧中銷毀該實例。

2. SingleTop模式

這種模式會考慮當前要激活的Activity實例在任務棧中是否正處於棧頂,如果處於棧頂則無需重新創建新的實例,會重用已存在的實例,否則會在任務棧中創建新的實例。

3. SingleTask模式

如果任務棧中存在該模式的Activity實例,則把棧中該實例以上的Activity實例全部移除,調用該實例的newInstance()方法重用該Activity,使該實例處於棧頂位置,否則就重新創建一個新的Activity實例。

4. SingleInstance模式

當該模式Activity實例在任務棧中創建後,只要該實例還在任務棧中,即只要激活的是該類型的Activity,都會通過調用實例的newInstance()方法重用該Activity,此時使用的都是同一個Activity實例,它都會處於任務棧的棧頂。此模式一般用於載入較慢的,比較耗性能且不需要每次都重新創建的Activity。

熱點內容
安卓和csharp哪個發展好 發布:2024-05-18 18:09:30 瀏覽:526
換編程題庫 發布:2024-05-18 18:00:58 瀏覽:562
如何使用伺服器ip直連網站 發布:2024-05-18 18:00:49 瀏覽:432
三星n7100哪個安卓版本好用 發布:2024-05-18 17:55:41 瀏覽:489
萬國覺醒採集腳本源碼 發布:2024-05-18 17:55:39 瀏覽:947
sqlserver加欄位 發布:2024-05-18 17:54:53 瀏覽:928
安卓手機如何清除應用記錄 發布:2024-05-18 17:31:37 瀏覽:639
查看存儲過程許可權 發布:2024-05-18 17:18:33 瀏覽:192
php類self 發布:2024-05-18 17:15:03 瀏覽:895
手機2b2t的伺服器地址是多少 發布:2024-05-18 17:14:56 瀏覽:189