開發(fā)APP對于FLAG解決方案,首先深圳APP開發(fā)公司本文就FLAG解決方案對于FLAG進(jìn)行簡單介紹,啟動Activity時,可以通過在傳遞給startActivity()的Intent中加入相應(yīng)的FLAG,修改Activit與其任務(wù)的默認(rèn)關(guān)聯(lián)方式。
常用的FLAG說明:FLAG_ACTIVITY_NEW_TASK在新任務(wù)中啟動Activity,如果為正在啟動的Activity運(yùn)行任務(wù),則該任務(wù)會轉(zhuǎn)到前臺并恢復(fù)其最后狀態(tài),同時Activity會在onNewIntent()中收到新Intent。
使用這個FLAG會產(chǎn)生與“singleTask”啟動模式相同的行為。FLAG_ACTIVITY_SINGLE_TOP
如果正在啟動的Activity是當(dāng)前Activity(位于返回棧的頂部),則現(xiàn)有實(shí)例會接收對onNewIntent()的調(diào)用,而不是創(chuàng)建Activity的新實(shí)例。使用這個FLAG會產(chǎn)生與“singleTop”啟動模式相同的行為。
FLAG_ACTIVITY_CLEAR_TOP
如果正在啟動的Activity已在當(dāng)前任務(wù)中運(yùn)行,則會銷毀當(dāng)前任務(wù)頂部的所有Activity,并通過onNewIntent()將此Intent傳遞給Activity已恢復(fù)的實(shí)例(現(xiàn)在位于頂部),而不是啟動該Activity的新實(shí)例。
注意:如果指定Activity的啟動模式為“standard”,則該Activity也會從堆棧中移除,并在其位置啟動一個新實(shí)例,以便處理傳入的Intent。這是因?yàn)楫?dāng)啟動模式為“standard”時,將始終為新Intent創(chuàng)建新實(shí)例。FLAG_ACTIVITY_NO_HISTORY新的Activity將不在歷史堆棧中保留,一旦從此Activity跳轉(zhuǎn)到其他的Activity,那么這個Activity就銷毀了。例如A啟動B的時候,給B設(shè)置了FLAG_ACTIVITY_NO_HISTORY,那么B啟動C后,堆棧中保留的Activity就會變?yōu)锳和C。
開發(fā)APP關(guān)于解決Activity消息路由解決方案
在Android開發(fā)中,常遇到多個Activity間的直接通信和調(diào)用,這樣會導(dǎo)致Acticity間的橫向依賴。為了解決此問題,可以設(shè)計和實(shí)現(xiàn)一個路由框架,實(shí)現(xiàn)不同Activity間的解耦。
APP開發(fā)公司關(guān)于關(guān)于設(shè)計思路
實(shí)現(xiàn)一個Activity路由類,由這個類實(shí)現(xiàn)Activity間的路由,各Activity間不直接聯(lián)系,由路由類作為中間件,實(shí)現(xiàn)各Activity間的聯(lián)系。目前大多數(shù)路由方式都是采用URL的方式實(shí)現(xiàn)的,在此利用類的反射機(jī)制實(shí)現(xiàn)此功能,實(shí)現(xiàn)方式相對簡單。
APP開發(fā)公司Activity消息路由具體實(shí)現(xiàn) 路由類的示例代碼如下:publicclassActivityRouter{ //每創(chuàng)建一個Activity,就在此定義一個字符串,記錄此Activity的類名
public static final String SECOND_ ACTIVITY = "com. example. myapplication. SecondActivity"; public static final String THREE_ ACTIVITY = "com. example. myapplication. ThreeActivity"; public static final String FOUR_ ACTIVITY = "com. example. myapplication. FourActivity"; // 傳遞 Activity 消息的方法, activityContext 表示 調(diào)用 startActivity 的 Activity, activityName // 表示被調(diào)用或被通知的 Activity 的類名字符串 public static boolean ActivityRouter( Intent intent, Context activityContext, final String activityName){ if( intent == null || activityContext == null || activityName == null){ return false; } Class<?> activityClass = null; try { // 通過類名字符串,找到相應(yīng)的類 activityClass = Class. forName( activityName); if( activityClass != null){ intent. setClass( activityContext, activityClass); }
} catch (Exception e){ e. printStackTrace(); return false; } return true; } } 使用 示例: //Activity 間不傳值時的情況 Intent intent = new Intent(); if (ActivityRouter. ActivityRouter( intent, MainActivity. this, ActivityRouter. SECOND_ ACTIVITY)) { startActivity( intent); } //Activity 間傳值時的情況 Intent intent = new Intent(); Bundle bundle = new Bundle(); bundle. putString(" keyString", "string"); bundle. putInt(" keyInt", 100);
intent. putExtras( bundle); if (ActivityRouter. ActivityRouter( intent, MainActivity. this, ActivityRouter. THREE_ ACTIVITY)) { startActivity( intent); } //Activity 間傳值,且主調(diào) Activity 需要接收被調(diào) Activity 返回值的情況 Intent intent = new Intent(); Bundle bundle = new Bundle(); bundle. putString(" keyString", "hello"); bundle. putInt(" keyInt", 400); intent. putExtras( bundle); if (ActivityRouter. ActivityRouter( intent, MainActivity. this, ActivityRouter. FOUR_ ACTIVITY)) { startActivityForResult( intent, REQUESTCODE); }
好了,APP開發(fā)公司本文關(guān)于“項(xiàng)目開發(fā)怎樣解決Activity消息路由實(shí)操代碼”的經(jīng)驗(yàn)分享就到這里,謝謝關(guān)注,博納網(wǎng)絡(luò)編輯整理。