下載本文檔
版權(quán)說明:本文檔由用戶提供并上傳,收益歸屬內(nèi)容提供方,若內(nèi)容存在侵權(quán),請進(jìn)行舉報或認(rèn)領(lǐng)
文檔簡介
【移動應(yīng)用開發(fā)技術(shù)】Android中容易忽略的知識
四大組件相關(guān):1.啟動一個Activity,在應(yīng)用進(jìn)程至少需要兩個Binder線程。2.啟動一個launchMode為singleTask的Activity,它并不一定會運行在新的Activity棧中。3.兩個不同應(yīng)用的Activity,可以運行在同一個Activity棧中。4.同一個應(yīng)用進(jìn)程中的所有Activity,共享一個WindowSession。5.彈出一個AlertDialog,不一定需要Activity級別的Context,而且任何地方都有辦法彈出一個AlertDialog,只要是在Application的attachBaseContext之后。下面是一個簡單的demo演示:首先看DemoApplication,然后看Alert類:在Application中初始化:在Application中初始化:import
android.app.Application;public
class
DemoApplication
extends
Application
{
@Override
public
void
onCreate()
{
Alert.alertAnyWhere();
super.onCreate();
}}下面這個類是對AlertDialog的封裝類:下面這個類是對AlertDialog的封裝類:import
android.app.AlertDialog;import
android.content.Context;import
android.content.DialogInterface;import
android.os.Build;import
android.os.Handler;import
android.os.Looper;import
android.view.WindowManager;import
java.lang.reflect.Method;public
class
Alert
{
public
static
void
alertDialog()
{
Context
mAppContext
=
null;
try
{
Class<?>
clazz
=
Class.forName("android.app.ActivityThread");
Method
method
=
clazz.getDeclaredMethod("currentApplication",
new
Class[0]);
mAppContext
=
(Context)
method.invoke(null,
new
Object[0]);
}
catch
(Throwable
e)
{
e.printStackTrace();
return;
}
AlertDialog.Builder
builder
=
new
AlertDialog.Builder(mAppContext);
builder.setTitle("Hi")
.setMessage("Hello
World");
.setPositiveButton("確定",
new
DialogInterface.OnClickListener()
{
@Override
public
void
onClick(DialogInterface
dialog,
int
which)
{
dialog.dismiss();
}
})
.setNegativeButton("取消",
new
DialogInterface.OnClickListener()
{
@Override
public
void
onClick(DialogInterface
dialog,
int
which)
{
}
});
AlertDialog
dialog
=
builder.create();
if
(Build.VERSION.SDK_INT
>=
Build.VERSION_CODES.KITKAT)
{
dialog.getWindow().setType(WindowManager.LayoutParams.TYPE_TOAST);
}
else
{
dialog.getWindow().setType(WindowManager.LayoutParams.TYPE_PHONE);
}
dialog.show();
}
private
static
Handler
handler;
public
static
void
alertAnyWhere()
{
if
(Looper.myLooper()
==
Looper.getMainLooper())
{
alertDialog();
}
else
{
if
(handler
==
null)
{
handler
=
new
Handler(Looper.getMainLooper());
}
handler.post(new
Runnable()
{
@Override
public
void
run()
{
alertDialog();
}
});
}
}}6.可以通過設(shè)置Activity主題android.R.style.Theme_NoDisplay,來啟動一個不顯示的Activity,在某些需要過渡的地方很實用。7.Activity、Service、Receiver在沒有配置intent-filter的action屬性時,exported默認(rèn)為false,配置了intent-filter的action屬性時,exported默認(rèn)為true。稍有不慎,很可能埋下越權(quán)、Intent等安全隱患。8.當(dāng)從最近使用應(yīng)用列表中移除某個App時,四大組件只有Service擁有神奇的onTaskRemoved回調(diào),但是并不一定回調(diào),還與stopWithTask屬性等有關(guān)。9.四大組件都運行在主線程,是因為它們在ActityThread中(或Instrumentation)實例化;它們的生命周期也運行在主線程,是因為通過ActivityThread.H將消息從Binder線程發(fā)送到主線程,然后執(zhí)行回調(diào)。10.TaskStackBuilder的出現(xiàn)基本上解決了所有構(gòu)造Activity回退棧的問題。11.ContentProvider的onCreate()方法先于Application的onCreate()方法執(zhí)行,晚于Application的attachBaseContext()方法,所以在ContentProvider的onCreate()時候也是有辦法彈出一個AlertDialog的(參考5)。12.BroadCastReceiver回調(diào)onReceive(Contextcontext,Intentintent)中的context類型各種場景相差很大,靜態(tài)注冊的receiver回調(diào)的Context都是ReceiverRestrictedContext,動態(tài)注冊的receiver有可能是Activity或Application。13.ServiceRecord和BroadcastRecord自身就是Binder。14.同一個provider組件名,可能對應(yīng)多個provider。1.MessageQueue.addIdleHandler可以用來在線程空閑的時候,完成某些操作,比較適合那種需要在將來執(zhí)行操作,卻又不知道需要指定多少延遲時間的操作。2.Message.what盡量不要設(shè)置成0,因為postRunnable的方式會生成Message.what為0的消息,如果刪除了what為0的Message,也會將runnable方式創(chuàng)建的Message刪掉。3.Handler可以設(shè)置同步異步(默認(rèn)是同步的),他們的區(qū)別在于異步不會被Barrier阻塞,而同步會被阻塞。4.Handler的消息分發(fā)流程是如果Message的callback不為空,通過callback處理,如果Handler的mCallback不為空,通過mCallback來處理,如果前兩個都為空,才調(diào)用handleMessage來處理。在DroidPlugin中,便是利用ActivityThread.H的這一特性,攔截了部分消息,實現(xiàn)Activity的插件化。5.Java層和Native層Looper、MessageQueue的創(chuàng)建時序,Java層Looper—>Java層MessageQueue—>Native層NativeMessageQueue—>Native層Looper。6.Java層通過Handler去發(fā)送消息,而Native層是通過Looper發(fā)消息。1.硬件加速在Window級只能開不能關(guān),View級只能關(guān)不能開。2.自android2.3刪除MidWindow后,PhoneWindow成了Window的唯一實現(xiàn)類。3.WMS管理Window的過程中涉及4個Binder,應(yīng)用進(jìn)程只有ViewRootImpl.W一個Binder服務(wù)端。4.MotionEvent、KeyEvent、DragEvent等具有相似的鏈?zhǔn)骄彺?,類似Message。5.在View的狀態(tài)保存、恢復(fù)過程中,ActionBar中所有View共享一個SparseArray容器,ContentView中所有View共享一個SparseArray容器。當(dāng)前獲取焦點的View會額外存儲。6.設(shè)置ViewTreeObserver的系列監(jiān)聽方法需要確保View在attachToWindow之后,否則可能因為add監(jiān)聽和remove監(jiān)聽不是作用于同一個對象而引起內(nèi)存泄漏等。1.可以通過文件鎖來實現(xiàn)進(jìn)程間互斥(參考:RePlugin),在處理某些只需要單進(jìn)程執(zhí)行的任務(wù)時很實用。2.Binder設(shè)計架構(gòu)中,只有Binder主線程是由本進(jìn)程主動創(chuàng)建,Binder普通線程都是由Binder驅(qū)動根據(jù)IPC通信需求被動創(chuàng)建。3.oneway與非oneway,都需要等待BinderDriver的回應(yīng)消息(BR_TRANSACTION_COMPLETE),區(qū)別在于oneway不用等待BR_REPLY消息。4.mediaserver和servicemanager的主線程都是binde
溫馨提示
- 1. 本站所有資源如無特殊說明,都需要本地電腦安裝OFFICE2007和PDF閱讀器。圖紙軟件為CAD,CAXA,PROE,UG,SolidWorks等.壓縮文件請下載最新的WinRAR軟件解壓。
- 2. 本站的文檔不包含任何第三方提供的附件圖紙等,如果需要附件,請聯(lián)系上傳者。文件的所有權(quán)益歸上傳用戶所有。
- 3. 本站RAR壓縮包中若帶圖紙,網(wǎng)頁內(nèi)容里面會有圖紙預(yù)覽,若沒有圖紙預(yù)覽就沒有圖紙。
- 4. 未經(jīng)權(quán)益所有人同意不得將文件中的內(nèi)容挪作商業(yè)或盈利用途。
- 5. 人人文庫網(wǎng)僅提供信息存儲空間,僅對用戶上傳內(nèi)容的表現(xiàn)方式做保護(hù)處理,對用戶上傳分享的文檔內(nèi)容本身不做任何修改或編輯,并不能對任何下載內(nèi)容負(fù)責(zé)。
- 6. 下載文件中如有侵權(quán)或不適當(dāng)內(nèi)容,請與我們聯(lián)系,我們立即糾正。
- 7. 本站不保證下載資源的準(zhǔn)確性、安全性和完整性, 同時也不承擔(dān)用戶因使用這些下載資源對自己和他人造成任何形式的傷害或損失。
最新文檔
- 四川省瀘州市瀘縣五中2024-2025學(xué)年高一(上)期末生物試卷(含答案)
- 習(xí)作:我的家人 說課稿-2024-2025學(xué)年語文四年級上冊統(tǒng)編版
- 鉬產(chǎn)品深加工技術(shù)改造產(chǎn)能提升項目可行性研究報告寫作模板-申批備案
- 廣西壯族自治區(qū)南寧市2024-2025學(xué)年八年級上學(xué)期期末生物試題(無答案)
- 安徽省淮北市和淮南市2025屆高三第一次質(zhì)量檢測歷史試卷(含答案)
- 陜西省寶雞市(2024年-2025年小學(xué)六年級語文)部編版期中考試((上下)學(xué)期)試卷及答案
- Unit 2 Making a Difference Developing ideas The power of good 說課稿-2023-2024學(xué)年高一英語外研版(2019)必修第三冊
- Unit 1 developing the topic-Oral communication 說課稿 2024-2025學(xué)年仁愛科普版(2024)七年級英語上冊
- 貴州黔南經(jīng)濟(jì)學(xué)院《數(shù)據(jù)結(jié)構(gòu)Ⅰ》2023-2024學(xué)年第一學(xué)期期末試卷
- 新疆塔城地區(qū)(2024年-2025年小學(xué)六年級語文)統(tǒng)編版綜合練習(xí)((上下)學(xué)期)試卷及答案
- 合肥市建筑行業(yè)施工安全生產(chǎn)標(biāo)準(zhǔn)化示范工地評選辦法
- 2025年度航空航天材料研發(fā)與應(yīng)用技術(shù)服務(wù)合同2篇
- AEO貿(mào)易安全培訓(xùn)
- 2025年中國財產(chǎn)險行業(yè)市場深度分析及發(fā)展趨勢預(yù)測報告
- 巨量信息流廣告(初級)營銷師認(rèn)證考試題及答案
- 重慶市渝中區(qū)2023-2024學(xué)年八年級上學(xué)期期末考試數(shù)學(xué)試題含答案及解析
- 【MOOC】教學(xué)研究的數(shù)據(jù)處理與工具應(yīng)用-愛課程 中國大學(xué)慕課MOOC答案
- 工商企業(yè)管理畢業(yè)論文范文 工商企業(yè)管理5000論文范文
- 《小學(xué)科學(xué)實驗創(chuàng)新》課件
- 2024年手術(shù)室護(hù)士年度工作計劃(4篇)
- 財務(wù)管理基礎(chǔ)規(guī)范操作手冊
評論
0/150
提交評論