簡析AMS、PMS、WMS

1. Activity Manager Service (AMS)

作用:

AMS 主要負(fù)責(zé)管理應(yīng)用的生命周期和任務(wù)棧。它處理應(yīng)用的啟動、暫停、恢復(fù)、停止等狀態(tài)。
它還負(fù)責(zé)調(diào)度系統(tǒng)中的活動(Activity),處理任務(wù)切換和多任務(wù)管理。

在開發(fā)中的使用:

開發(fā)者通常不直接與 AMS 交互,但可以通過 Activity 生命周期方法(如 onCreate(), onResume(), onPause())來實(shí)現(xiàn)對應(yīng)用狀態(tài)的管理。
AMS 還影響到應(yīng)用的任務(wù)棧管理,開發(fā)者可以使用 Intent 和 Task Affinity 來控制任務(wù)棧的行為。

知識點(diǎn):

任務(wù)棧:Android 使用棧結(jié)構(gòu)管理活動。新活動會推送到棧頂,而返回到之前的活動則會彈出棧頂?shù)幕顒印?br> Activity 生命周期:了解生命周期方法是開發(fā)和調(diào)試應(yīng)用時必不可少的。

代碼示例:
// 示例:在 Activity 中處理生命周期
public class MainActivity extends AppCompatActivity {
    
    @Override
    protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.activity_main);
        // 初始化代碼
    }

    @Override
    protected void onResume() {
        super.onResume();
        // Activity 恢復(fù)到前臺
    }

    @Override
    protected void onPause() {
        super.onPause();
        // Activity 被置于后臺
    }

    @Override
    protected void onDestroy() {
        super.onDestroy();
        // Activity 被銷毀
    }
}

2. Package Manager Service (PMS)

作用:

PMS 負(fù)責(zé)管理應(yīng)用程序的安裝、卸載、查詢及其權(quán)限。
提供了關(guān)于已安裝應(yīng)用的信息,如包名、權(quán)限、組件等。

在開發(fā)中的使用:

開發(fā)者可以使用 PackageManager 類來查詢應(yīng)用信息或進(jìn)行相關(guān)操作。
使用 PackageManager 獲取應(yīng)用權(quán)限、安裝狀態(tài)等信息。

知識點(diǎn):

權(quán)限:通過 AndroidManifest.xml 文件聲明應(yīng)用需要的權(quán)限,PMS 管理這些權(quán)限的請求和驗(yàn)證。
內(nèi)容提供者:PMS 還涉及內(nèi)容提供者的注冊和管理。

代碼示例:
// 示例:使用 PackageManager 查詢已安裝應(yīng)用
PackageManager packageManager = getPackageManager();
List<ApplicationInfo> apps = packageManager.getInstalledApplications(PackageManager.GET_META_DATA);

for (ApplicationInfo app : apps) {
    Log.d("AppInfo", "App: " + app.packageName);
}

// 獲取應(yīng)用權(quán)限
try {
    PackageInfo packageInfo = packageManager.getPackageInfo("com.example.myapp", PackageManager.GET_PERMISSIONS);
    String[] requestedPermissions = packageInfo.requestedPermissions;
    if (requestedPermissions != null) {
        for (String permission : requestedPermissions) {
            Log.d("Permission", "Permission: " + permission);
        }
    }
} catch (PackageManager.NameNotFoundException e) {
    e.printStackTrace();
}

3. Window Manager Service (WMS)

作用:

WMS 負(fù)責(zé)窗口的顯示和管理,包括布局、動畫和用戶交互。
管理系統(tǒng)中的所有窗口,包括活動窗口、對話框、系統(tǒng)提示等。

在開發(fā)中的使用:

開發(fā)者通過 WindowManager 類來進(jìn)行窗口的管理,比如設(shè)置窗口屬性、添加自定義窗口等。
通過 Window 和 View 進(jìn)行界面的布局和交互。

知識點(diǎn):

窗口屬性:如 WindowManager.LayoutParams,用于設(shè)置窗口的各種屬性(如大小、位置、樣式)。
視圖層級:理解視圖的層級和繪制順序?qū)﹂_發(fā)具有復(fù)雜界面的應(yīng)用程序非常重要。

代碼示例:
// 示例:使用 WindowManager 添加自定義窗口
WindowManager windowManager = (WindowManager) getSystemService(Context.WINDOW_SERVICE);
WindowManager.LayoutParams params = new WindowManager.LayoutParams(
    WindowManager.LayoutParams.WRAP_CONTENT,
    WindowManager.LayoutParams.WRAP_CONTENT,
    WindowManager.LayoutParams.TYPE_APPLICATION_OVERLAY,
    WindowManager.LayoutParams.FLAG_NOT_FOCUSABLE,
    PixelFormat.TRANSLUCENT);

TextView textView = new TextView(this);
textView.setText("This is a custom window");
textView.setBackgroundColor(Color.GREEN);

windowManager.addView(textView, params);
最后編輯于
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請聯(lián)系作者
【社區(qū)內(nèi)容提示】社區(qū)部分內(nèi)容疑似由AI輔助生成,瀏覽時請結(jié)合常識與多方信息審慎甄別。
平臺聲明:文章內(nèi)容(如有圖片或視頻亦包括在內(nèi))由作者上傳并發(fā)布,文章內(nèi)容僅代表作者本人觀點(diǎn),簡書系信息發(fā)布平臺,僅提供信息存儲服務(wù)。

友情鏈接更多精彩內(nèi)容