<em>Mac</em>Book项目 2009年学校开始实施<em>Mac</em>Book项目,所有师生配备一本<em>Mac</em>Book,并同步更新了校园无线网络。学校每周进行电脑技术更新,每月发送技术支持资料,极大改变了教学及学习方式。因此2011
2021-06-01 09:32:01
Activity是安卓應用的重要組成單元之一,其對於安卓的作用類似於Servlet對於Web應用的作用。
整個Activity生命週期的圖解如下
具體的生命週期可以總結成如下幾個步驟
onCreate():Activity啟動後第一個被呼叫的函數,常用來進行Activity的初始化,如建立View,繫結資料和恢復資料。
onStart():當Activity顯示在螢幕上時,函數被呼叫。
onRestart():Activity從停止狀態進入活動狀態是呼叫。
onResume():Activity可以接受使用者輸入時,該函數被呼叫,此時的activity位於activity棧的棧頂。
onPause():當Activity進入暫停狀態時,該函數被呼叫,一般用來儲存持久的資料或釋放佔用的資源。
onStop():當Activity變為不可見後,該函數被呼叫,Activity進入停止狀態。
onDestroy():在Activity被終止前,被呼叫。
歸納起來,Activity大概會經歷四種狀態
執行狀態:當前Activity位於前臺,使用者可見,可以獲得焦點
暫停狀態:其他Activity位於前臺,該Activity依然可見,只是不能獲得焦點
停止狀態:該Activity不可見,失去焦點
銷燬狀態:該Activity結束,或Activity所在的程序被結束
我們使用給一個程式來看一下看一下Activity的生命週期。程式非常簡單,就是定義兩個Activity,分別命名為FirstActivity和SecondActivity,先從FirstActivity跳轉到SecondActivity,然後再在SecondActivity銷燬該Activity,最後銷燬FirstActivity
public class FirstActivity extends Activity { final String TAG = "-----FirstActivity-----"; @Override protected void onCreate(@Nullable Bundle savedInstanceState) { super.onCreate(savedInstanceState); setContentView(R.layout.first); // 輸出紀錄檔 Log.d(TAG, "-----onCreate-----"); TextView textView = findViewById(R.id.text1); Button button1 = findViewById(R.id.bn_first1); Button button2 = findViewById(R.id.bn_first2); // 第一個按鈕跳轉到第二個Activity button1.setOnClickListener(new View.OnClickListener() { @Override public void onClick(View v) { Intent intent = new Intent(FirstActivity.this, SecondActivity.class); startActivity(intent); } }); // 第二個按鈕銷燬該Activity button2.setOnClickListener(new View.OnClickListener() { @Override public void onClick(View v) { FirstActivity.this.finish(); } }); } @Override protected void onStart() { super.onStart(); Log.d(TAG, "-----onStart-----"); } @Override protected void onRestart() { super.onRestart(); Log.d(TAG, "-----onRestart-----"); } @Override protected void onResume() { super.onResume(); Log.d(TAG, "-----onResume-----"); } @Override protected void onPause() { super.onPause(); Log.d(TAG, "-----onPause-----"); } @Override protected void onStop() { super.onStop(); Log.d(TAG, "-----onStop-----"); } @Override protected void onDestroy() { super.onDestroy(); Log.v(TAG, "-----onDestory-----"); } }
public class SecondActivity extends Activity { @Override protected void onCreate(@Nullable Bundle savedInstanceState) { super.onCreate(savedInstanceState); setContentView(R.layout.second); Button button = findViewById(R.id.bn_second); button.setOnClickListener(new View.OnClickListener() { @Override public void onClick(View v) { SecondActivity.this.finish(); } }); } }
最後得到的紀錄檔資訊如下所示,我們過濾了其他紀錄檔,只保留FirstActivity的紀錄檔
Activity一共有四種載入模式
安卓採用Task來管理多個Activity,當我們啟動應用的時候,安卓就會位置建立一個Task,然後啟動這個參照的入口Activity,(即<intent-filter>中設定為MAIN和LAUNCHER的Activity)。
我們可以將Task簡單理解成存放Activity的棧,先載入的Activity位於棧底,後載入的Activity位於棧頂。
Activity的載入模式就是按照什麼樣的方式去範例化,載入Activity,並且控制Activity和Task之間的關係。
standard模式
當我們通過standard模式啟動Activity的時候,每次都會建立一個新的Activity範例放置到棧頂。當我們在設定Activity時沒有指定載入模式的時候,採用的就是standard模式。
singleTop模式
這種模式與standard模式基本相同,唯一不同的就是,當要啟動的Activity已經位於棧頂的時候不會建立一個新的範例,而是複用已有的範例。如果我們的目標Activity不位於棧頂,那麼還是會建立一個新的範例,這一點和standard模式是一樣的。
singleTask模式
採用singleTask模式的Activity在同一個Task中只有一個範例,當系統採用singleTask模式啟動目標Activity的時候,可分為如下三種情況
如果要啟動的Activity範例不存在,系統會建立一個範例,並且將其置於棧頂
如果要啟動的Activity範例位於棧頂,此時的操作與singleTop模式相同
如果要啟動的Activity範例存在於棧中,但是沒有位於棧頂,那麼系統就會將該Activity上的所有Activity移出Task棧,從而使目標Activity轉入棧頂
singleInstance模式
在這種載入模式下,系統保證無論從哪個Task中啟動目標Activity,只會建立一個目標Activity範例,並會使用一個全新的Task棧來載入該Activity範例。
當系統採用singleInstance模式啟動目標Activity時,可分為如下兩種情況
如果要啟動的目標Activity不存在,系統會建立一個全新的Task,再建立目標Activity的範例,並將它加入到新的Task棧頂
如果要啟動的目標Activity已經存在,無論它位於哪個應用程式中,位於哪個Task中,系統都會把該Activity所在的Task轉到前臺,從而使該Activity顯示出來
到此這篇關於Android Activity的生命週期與載入模式超詳細圖文解析的文章就介紹到這了,更多相關Android Activity的生命週期內容請搜尋it145.com以前的文章或繼續瀏覽下面的相關文章希望大家以後多多支援it145.com!
相關文章
<em>Mac</em>Book项目 2009年学校开始实施<em>Mac</em>Book项目,所有师生配备一本<em>Mac</em>Book,并同步更新了校园无线网络。学校每周进行电脑技术更新,每月发送技术支持资料,极大改变了教学及学习方式。因此2011
2021-06-01 09:32:01
综合看Anker超能充系列的性价比很高,并且与不仅和iPhone12/苹果<em>Mac</em>Book很配,而且适合多设备充电需求的日常使用或差旅场景,不管是安卓还是Switch同样也能用得上它,希望这次分享能给准备购入充电器的小伙伴们有所
2021-06-01 09:31:42
除了L4WUDU与吴亦凡已经多次共事,成为了明面上的厂牌成员,吴亦凡还曾带领20XXCLUB全队参加2020年的一场音乐节,这也是20XXCLUB首次全员合照,王嗣尧Turbo、陈彦希Regi、<em>Mac</em> Ova Seas、林渝植等人全部出场。然而让
2021-06-01 09:31:34
目前应用IPFS的机构:1 谷歌<em>浏览器</em>支持IPFS分布式协议 2 万维网 (历史档案博物馆)数据库 3 火狐<em>浏览器</em>支持 IPFS分布式协议 4 EOS 等数字货币数据存储 5 美国国会图书馆,历史资料永久保存在 IPFS 6 加
2021-06-01 09:31:24
开拓者的车机是兼容苹果和<em>安卓</em>,虽然我不怎么用,但确实兼顾了我家人的很多需求:副驾的门板还配有解锁开关,有的时候老婆开车,下车的时候偶尔会忘记解锁,我在副驾驶可以自己开门:第二排设计很好,不仅配置了一个很大的
2021-06-01 09:30:48
不仅是<em>安卓</em>手机,苹果手机的降价力度也是前所未有了,iPhone12也“跳水价”了,发布价是6799元,如今已经跌至5308元,降价幅度超过1400元,最新定价确认了。iPhone12是苹果首款5G手机,同时也是全球首款5nm芯片的智能机,它
2021-06-01 09:30:45