安卓初学者笔记(四):用白话讲明白Activity是什么
剛開(kāi)始學(xué)習(xí)Android,被Activity搞的暈頭轉(zhuǎn)向,看了很多資料,才大概搞清楚。因?yàn)槟切└呤謱?xiě)的都是術(shù)語(yǔ)和英文,想看懂文章就像要去威虎山剿匪一樣,必須懂那些黑話,要不然基本有去無(wú)回。
Activity(活動(dòng))其實(shí)是“安卓”系統(tǒng)的重要組件(組成部分)之一。Android四大組件有Activity活動(dòng),Service服務(wù),Content Provider內(nèi)容提供,BroadcastReceiver廣播接收器。
一個(gè)Activity是一個(gè)應(yīng)用程序的組件,通常一個(gè)Activity里會(huì)有一個(gè)頁(yè)面,用戶讓用戶來(lái)操作,完成如打電話、發(fā)短信、拍照等功能。
通常一個(gè)Activity活動(dòng),會(huì)有七種狀態(tài),厲害吧?
onStart(); —->中文翻譯:開(kāi)始
onRestart(); —->中文翻譯:重新開(kāi)始
onResume(); —->中文翻譯:恢復(fù)
onPause(); —->中文翻譯:暫停
onStop(); —->中文翻譯:停止
onDestroy(); —->中文翻譯:消毀
為什么會(huì)有這么多種狀態(tài)?因?yàn)锳ndroid是機(jī)器人,不是人,還沒(méi)有達(dá)到人工智能,所以你想讓它做什么事,必須詳細(xì)告訴它每一步要做什么,在做這些事的過(guò)程中可能會(huì)遇到什么情況,如何處理。
比如,指揮一個(gè)機(jī)器人如何看書(shū),如下圖:
指揮機(jī)器人的步驟越詳細(xì),越容易讓機(jī)器人理解。看懂了以上的內(nèi)容,再來(lái)看看原版的圖片。
這回大概能理解Activity的工作原理了吧?
接下來(lái),要引入下一個(gè)概念:棧,棧(stack)又名堆棧,堆,一堆東西,有點(diǎn)好理解了吧?如果還是不理解,直接就把棧想像成幾頁(yè)A4紙,實(shí)際上,就是這原理。
可以把安卓的Activity棧想像成幾張A4紙,你看到手機(jī)現(xiàn)在的可操作頁(yè)面就是最頂上的A4紙,你可以在這兒寫(xiě)寫(xiě)畫(huà)畫(huà)。需要其它頁(yè)的時(shí)候,通常把這頁(yè)紙放到下邊,再拿一張紙放在最上面(棧頂)。
Android 是通過(guò)一種 Activity 棧的方式來(lái)管理 Activity 的,一個(gè) Activity 的實(shí)例的狀態(tài)決定它在棧中的位置。處于前臺(tái)的 Activity 總是在棧的頂端,當(dāng)前臺(tái)的 Activity 因?yàn)楫惓;蚱渌虮讳N毀時(shí),處于棧第二層的 Activity 將被激活,上浮到棧頂。當(dāng)新的 Activity 啟動(dòng)入棧時(shí),原 Activity 會(huì)被壓入到棧的第二層。一個(gè) Activity 在棧中的位置變化反映了它在不同狀態(tài)間的轉(zhuǎn)換。Activity 的狀態(tài)與它在棧中的位置關(guān)系如下圖所示:
當(dāng)然,以上的基本思路能理解,接下來(lái),我們就可以做實(shí)驗(yàn)了。
建立一個(gè)新的項(xiàng)目,畫(huà)兩個(gè)頁(yè)面,這個(gè)可以會(huì)。
然后把如下代碼復(fù)制到MainActivity.java里:
package com.example.jeffersli.myapplication;import android.app.Activity; import android.content.Intent; import android.os.Bundle; import android.util.Log; import android.view.View; import android.widget.Button;public class MainActivity extends Activity {private static final String TAG = "ActivityDemo";private Button button,button2;public void onCreate(Bundle savedInstanceState) {super.onCreate(savedInstanceState);setContentView(R.layout.activity_main);button=(Button)findViewById(R.id.button);button2=(Button)findViewById(R.id.button2);button.setOnClickListener(new View.OnClickListener(){public void onClick(View v){Intent intent = new Intent();intent.setClass(MainActivity.this, SecondActivity.class);startActivity(intent);}});button2.setOnClickListener(new View.OnClickListener(){public void onClick(View v){finish();}});Log.e(TAG, "start onCreate~~主頁(yè)面建立,拿起第一本書(shū)");}@Overrideprotected void onStart() {super.onStart();Log.e(TAG, "start onStart~~主頁(yè)面開(kāi)始,開(kāi)始翻頁(yè)");}@Overrideprotected void onRestart() {super.onRestart();Log.e(TAG, "start onRestart~~主頁(yè)面重啟,找到剛才的書(shū)");}@Overrideprotected void onResume() {super.onResume();Log.e(TAG, "start onResume~~主頁(yè)面繼續(xù),看書(shū)");}@Overrideprotected void onPause() {super.onPause();Log.e(TAG, "start onPause~~主頁(yè)面暫停,放下");}@Overrideprotected void onStop() {super.onStop();Log.e(TAG, "start onStop~~主頁(yè)面停止,第一本書(shū)本自動(dòng)合上");}@Overrideprotected void onDestroy() {super.onDestroy();Log.e(TAG, "start onDestroy~~主頁(yè)面消毀,把第一本書(shū)放到書(shū)架上");}}再建立一個(gè)SecondActivity,別忘了在AndroidManifest.xml里注冊(cè)。語(yǔ)句為:
package com.example.jeffersli.myapplication;import android.app.Activity; import android.content.Intent; import android.os.Bundle; import android.util.Log; import android.view.View; import android.widget.Button;public class SecondActivity extends Activity {private static final String TAG = "ActivityDemo";private Button button;public void onCreate(Bundle savedInstanceState) {super.onCreate(savedInstanceState);setContentView(R.layout.activity_second);button=(Button)findViewById(R.id.button);button.setOnClickListener(new View.OnClickListener(){public void onClick(View v){finish();}});Log.e(TAG, "start onCreate~~第二頁(yè)面建立,拿起第二本書(shū)");}@Overrideprotected void onStart() {super.onStart();Log.e(TAG, "start onStart~~第二頁(yè)面開(kāi)始,開(kāi)始翻頁(yè)");}@Overrideprotected void onRestart() {super.onRestart();Log.e(TAG, "start onRestart~~第二頁(yè)面重啟,找到剛才的書(shū)");}@Overrideprotected void onResume() {super.onResume();Log.e(TAG, "start onResume~~第二頁(yè)面繼續(xù),看書(shū)");}@Overrideprotected void onPause() {super.onPause();Log.e(TAG, "start onPause~~第二頁(yè)面暫停,放下");}@Overrideprotected void onStop() {super.onStop();Log.e(TAG, "start onStop~~第二頁(yè)面停止,第二本書(shū)本自動(dòng)合上");}@Overrideprotected void onDestroy() {super.onDestroy();Log.e(TAG, "start onDestroy~~第二頁(yè)面消毀,把第二本書(shū)放到書(shū)架上");} }接下來(lái)編譯運(yùn)行,在Logcat窗口就可以看到有意思的內(nèi)容了,玩一會(huì)就理解這些Activity到底在忙啥了。
總結(jié)
以上是生活随笔為你收集整理的安卓初学者笔记(四):用白话讲明白Activity是什么的全部?jī)?nèi)容,希望文章能夠幫你解決所遇到的問(wèn)題。
- 上一篇: js 批量下载文件
- 下一篇: js实现外链访问劫持代码 可劫持百度快照