真实的国产乱ⅩXXX66竹夫人,五月香六月婷婷激情综合,亚洲日本VA一区二区三区,亚洲精品一区二区三区麻豆

成都創(chuàng)新互聯(lián)網(wǎng)站制作重慶分公司

Android冷門(mén)知識(shí)點(diǎn)有哪些

這篇文章將為大家詳細(xì)講解有關(guān)Android冷門(mén)知識(shí)點(diǎn)有哪些,小編覺(jué)得挺實(shí)用的,因此分享給大家做個(gè)參考,希望大家閱讀完這篇文章后可以有所收獲。

成都創(chuàng)新互聯(lián)公司-專(zhuān)業(yè)網(wǎng)站定制、快速模板網(wǎng)站建設(shè)、高性?xún)r(jià)比沂水網(wǎng)站開(kāi)發(fā)、企業(yè)建站全套包干低至880元,成熟完善的模板庫(kù),直接使用。一站式沂水網(wǎng)站制作公司更省心,省錢(qián),快速模板網(wǎng)站建設(shè)找我們,業(yè)務(wù)覆蓋沂水地區(qū)。費(fèi)用合理售后完善,十年實(shí)體公司更值得信賴(lài)。

四大組件相關(guān):

1.啟動(dòng)一個(gè)Activity,在應(yīng)用進(jìn)程至少需要兩個(gè)Binder線程。

2.啟動(dòng)一個(gè)launchMode為singleTask的Activity,它并不一定會(huì)運(yùn)行在新的Activity棧中。

3.兩個(gè)不同應(yīng)用的Activity,可以運(yùn)行在同一個(gè)Activity棧中。

4.同一個(gè)應(yīng)用進(jìn)程中的所有Activity,共享一個(gè)WindowSession。

5.彈出一個(gè)AlertDialog,不一定需要Activity級(jí)別的Context,而且任何地方都有辦法彈出一個(gè)AlertDialog,只要是在Application的attachBaseContext之后。

下面是一個(gè)簡(jiǎn)單的demo演示:

首先看DemoApplication,然后看Alert類(lèi):

在Application中初始化:

import android.app.Application;public class DemoApplication extends Application {
    @Override
    public void onCreate() {
        Alert.alertAnyWhere();
        super.onCreate();
    }}

下面這個(gè)類(lèi)是對(duì)AlertDialog的封裝類(lèi):

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.可以通過(guò)設(shè)置Activity主題android.R.style.Theme_NoDisplay,來(lái)啟動(dòng)一個(gè)不顯示的Activity,在某些需要過(guò)渡的地方很實(shí)用。

7.Activity、Service、Receiver在沒(méi)有配置intent-filter的action屬性時(shí),exported默認(rèn)為false,配置了intent-filter的action屬性時(shí),exported默認(rèn)為true。稍有不慎,很可能埋下越權(quán)、Intent等安全隱患。

8.當(dāng)從最近使用應(yīng)用列表中移除某個(gè)App時(shí),四大組件只有Service擁有神奇的onTaskRemoved回調(diào),但是并不一定回調(diào),還與stopWithTask屬性等有關(guān)。

9.四大組件都運(yùn)行在主線程,是因?yàn)樗鼈冊(cè)贏ctityThread中(或Instrumentation)實(shí)例化;它們的生命周期也運(yùn)行在主線程,是因?yàn)橥ㄟ^(guò)ActivityThread.H將消息從Binder線程發(fā)送到主線程,然后執(zhí)行回調(diào)。

10.TaskStackBuilder的出現(xiàn)基本上解決了所有構(gòu)造Activity回退棧的問(wèn)題。

11.ContentProvider的onCreate()方法先于Application的onCreate()方法執(zhí)行,晚于Application的attachBaseContext()方法,所以在ContentProvider的onCreate()時(shí)候也是有辦法彈出一個(gè)AlertDialog的(參考5)。

12.BroadCastReceiver回調(diào)onReceive(Context context,Intent intent)中的context類(lèi)型各種場(chǎng)景相差很大,靜態(tài)注冊(cè)的receiver回調(diào)的Context都是ReceiverRestrictedContext,動(dòng)態(tài)注冊(cè)的receiver有可能是Activity或Application。

13.ServiceRecord和BroadcastRecord自身就是Binder。

14.同一個(gè)provider組件名,可能對(duì)應(yīng)多個(gè)provider。

Handler、Message相關(guān):

1.MessageQueue.addIdleHandler可以用來(lái)在線程空閑的時(shí)候,完成某些操作,比較適合那種需要在將來(lái)執(zhí)行操作,卻又不知道需要指定多少延遲時(shí)間的操作。

2.Message.what盡量不要設(shè)置成0,因?yàn)閜ostRunnable的方式會(huì)生成Message.what為0的消息,如果刪除了what為0的Message,也會(huì)將runnable方式創(chuàng)建的Message刪掉。

3.Handler可以設(shè)置同步異步(默認(rèn)是同步的),他們的區(qū)別在于異步不會(huì)被Barrier阻塞,而同步會(huì)被阻塞。

4.Handler的消息分發(fā)流程是如果Message的callback不為空,通過(guò)callback處理,如果Handler的mCallback不為空,通過(guò)mCallback來(lái)處理,如果前兩個(gè)都為空,才調(diào)用handleMessage來(lái)處理。在DroidPlugin中,便是利用ActivityThread.H的這一特性,攔截了部分消息,實(shí)現(xiàn)Activity的插件化。

5.Java層和Native層Looper、MessageQueue的創(chuàng)建時(shí)序,Java層Looper—>Java層MessageQueue—>Native層NativeMessageQueue—>Native層Looper。

6.Java層通過(guò)Handler去發(fā)送消息,而Native層是通過(guò)Looper發(fā)消息。

Window、View相關(guān):

1.硬件加速在Window級(jí)只能開(kāi)不能關(guān),View級(jí)只能關(guān)不能開(kāi)。

2.自android2.3刪除MidWindow后,PhoneWindow成了Window的唯一實(shí)現(xiàn)類(lèi)。

3.WMS管理Window的過(guò)程中涉及4個(gè)Binder,應(yīng)用進(jìn)程只有ViewRootImpl.W一個(gè)Binder服務(wù)端。

4.MotionEvent、KeyEvent、DragEvent等具有相似的鏈?zhǔn)骄彺妫?lèi)似Message。

5.在View的狀態(tài)保存、恢復(fù)過(guò)程中,ActionBar中所有View共享一個(gè)SparseArray容器,ContentView中所有View共享一個(gè)SparseArray容器。當(dāng)前獲取焦點(diǎn)的View會(huì)額外存儲(chǔ)。

6.設(shè)置ViewTreeObserver的系列監(jiān)聽(tīng)方法需要確保View在attachToWindow之后,否則可能因?yàn)閍dd監(jiān)聽(tīng)和remove監(jiān)聽(tīng)不是作用于同一個(gè)對(duì)象而引起內(nèi)存泄漏等。

Binder、IPC、進(jìn)程等相關(guān)

1.可以通過(guò)文件鎖來(lái)實(shí)現(xiàn)進(jìn)程間互斥(參考:RePlugin),在處理某些只需要單進(jìn)程執(zhí)行的任務(wù)時(shí)很實(shí)用。

2.Binder設(shè)計(jì)架構(gòu)中,只有Binder主線程是由本進(jìn)程主動(dòng)創(chuàng)建,Binder普通線程都是由Binder驅(qū)動(dòng)根據(jù)IPC通信需求被動(dòng)創(chuàng)建。

3.oneway與非oneway,都需要等待Binder Driver的回應(yīng)消息(BR_TRANSACTION_COMPLETE),區(qū)別在于oneway不用等待BR_REPLY消息。

4.mediaserver和servicemanager的主線程都是binder線程,但system_server的主線程不是Binder線程,system_server主線程的玩法跟應(yīng)用進(jìn)程一樣。

5.同一個(gè)BpBinder可以注冊(cè)多個(gè)死亡回調(diào),但Kernel只允許注冊(cè)一次死亡通知。

6.應(yīng)用進(jìn)程由Zygote進(jìn)程孵化而來(lái),在它真正成為應(yīng)用進(jìn)程之前,系統(tǒng)通過(guò)拋異常的方式來(lái)清理?xiàng)⒎瓷湔{(diào)用ActivityThread的main方法。

7.在Binder通信的過(guò)程中,數(shù)據(jù)是從發(fā)起通信進(jìn)程的用戶(hù)空間直接寫(xiě)到目標(biāo)進(jìn)程內(nèi)核空間,內(nèi)核空間的數(shù)據(jù)釋放是由用戶(hù)空間控制的。

關(guān)于“Android冷門(mén)知識(shí)點(diǎn)有哪些”這篇文章就分享到這里了,希望以上內(nèi)容可以對(duì)大家有一定的幫助,使各位可以學(xué)到更多知識(shí),如果覺(jué)得文章不錯(cuò),請(qǐng)把它分享出去讓更多的人看到。


新聞標(biāo)題:Android冷門(mén)知識(shí)點(diǎn)有哪些
地址分享:http://weahome.cn/article/jdehcj.html

其他資訊

在線咨詢(xún)

微信咨詢(xún)

電話咨詢(xún)

028-86922220(工作日)

18980820575(7×24)

提交需求

返回頂部