java activity是什么,讓我們一起了解一下?
activity是Android組件中最基本也是最為常見(jiàn)用的四大組件之一。Activity也是一個(gè)與用戶(hù)交互交互的系統(tǒng)模塊,幾乎所有的Activity都是和用戶(hù)進(jìn)行交互的,只需要提供一個(gè)屏幕,用戶(hù)就可以用來(lái)交互為了完成某項(xiàng)任務(wù)。
java中的activity主要作用是什么?
首先在深入了解Activity之前,我們先要知道一下MVC設(shè)計(jì)模式,在JAVAEE 中MVC設(shè)計(jì)模式已經(jīng)很經(jīng)典了,而且分的也比較清晰了,但是在Android中,好多人對(duì)MVC在Android開(kāi)發(fā)中的應(yīng)用不是很清楚,我們來(lái)了解一下MVC在Android開(kāi)發(fā)中的應(yīng)用。
M(Model 模型):Model是應(yīng)用程序的主體部分,所有的業(yè)務(wù)邏輯都應(yīng)該寫(xiě)在這里,在Android中Model層與JavaEE中的變化不大,如:對(duì)數(shù)據(jù)庫(kù)的操作,對(duì)網(wǎng)絡(luò)等的操作都放在該層(但不是說(shuō)它們都放在同一個(gè)包中,可以分開(kāi)放,但它們統(tǒng)稱(chēng)為Model層)。
V(View 視圖):是應(yīng)用程序中負(fù)責(zé)生成用戶(hù)界面的部分,也是在整個(gè)MVC架構(gòu)中用戶(hù)唯一可以看到的一層,接收用戶(hù)輸入,顯示處理結(jié)果;在Android應(yīng)用中一般采用XML文件里德界面的描述,使用的時(shí)候可以非常方便的引入,當(dāng)然也可以使用JavaScript+Html等方式作為View。
C(Controller控制層)android的控制層的重任就要落在眾多的activity的肩上了,所以在這里就要建議大家不要在activity中寫(xiě)太多的代碼,盡量能過(guò)activity交割Model業(yè)務(wù)邏輯層處理。
這就是Android應(yīng)用開(kāi)發(fā)中的MVC架構(gòu),我們就可以很明確的知道,在Android中Activity主要是用來(lái)做控制的,它可以選擇要顯示的View,也可以從View中獲取數(shù)據(jù)然后把數(shù)據(jù)傳給Model層進(jìn)行處理,最后再來(lái)顯示出處理結(jié)果。
實(shí)戰(zhàn)中,Activity應(yīng)該如何應(yīng)用?
我們以Activity的啟動(dòng)過(guò)程為例,側(cè)重于分析相關(guān)數(shù)據(jù)結(jié)構(gòu)的構(gòu)建與管理,以達(dá)到理解整個(gè)AMS對(duì)Activity的管理。
android中是通過(guò)Intent來(lái)啟動(dòng)一個(gè)新的activity的,因此AMS在得到請(qǐng)求啟動(dòng)activity時(shí),首先需要根據(jù)Intent從PM中獲得要啟動(dòng)的activity,PM通過(guò)parse 每個(gè)application的AndroidManifest.xml來(lái)獲得所有的activity信息,針對(duì)每個(gè)Intent提供的信息,PM會(huì)提供給AMS一個(gè)ResolveInfo對(duì)象。
startActivityMayWait()@ActivityManagerService.java
//?Don't?modify?the?client's?object!?? ?intent?=?new?Intent(intent);?? ?? ?//?Collect?information?about?the?target?of?the?Intent.?? ?ActivityInfo?aInfo;?? ?try?{?? ?????ResolveInfo?rInfo?=?? ?????????AppGlobals.getPackageManager().resolveIntent(?? ?????????????????intent,?resolvedType,?? ?????????????????PackageManager.MATCH_DEFAULT_ONLY?? ?????????????????|?ActivityManagerService.STOCK_PM_FLAGS);?? ?????aInfo?=?rInfo?!=?null???rInfo.activityInfo?:?null;?? ?}?catch?(RemoteException?e)?{?? ?????aInfo?=?null;?? ?}?? ?? ?if?(aInfo?!=?null)?{?? ?????//?Store?the?found?target?back?into?the?intent,?because?now?that?? ?????//?we?have?it?we?never?want?to?do?this?again.??For?example,?if?the?? ?????//?user?navigates?back?to?this?point?in?the?history,?we?should?? ?????//?always?restart?the?exact?same?activity.?? ?????intent.setComponent(new?ComponentName(?? ?????????????aInfo.applicationInfo.packageName,?aInfo.name));?? ?? ?????//?Don't?debug?things?in?the?system?process?? ?????if?(debug)?{?? ?????????if?(!aInfo.processName.equals("system"))?{?? ?????????????mService.setDebugApp(aInfo.processName,?true,?false);?? ?????????}?? ?????}?? ?}
以上就是小編今天的分享了,希望可以幫助到大家。