android基础学习之PackageManager和activityManager的用法

来源:互联网 发布:华为云计算实验室 编辑:程序博客网 时间:2024/04/28 23:09

Android系统为应用管理功能提供了大量的API。根据功能的不同,这些API分为两大类:PackageManager相关和ActivitManager相关。
PackageManager相关

      本类API是对所有基于加载信息的数据结构的封装,包括以下功能:

    安装,卸载应用
    查询permission相关信息
    查询Application相关信息(application,activity,receiver,service,provider及相应属性等)
    查询已安装应用
    增加,删除permission
    清除用户数据、缓存,代码段等

非查询相关的API需要特定的权限,具体的API请参考SDK文档。
ActivityManager相关

      本类API是对运行时管理功能和运行时数据结构的封装,包括以下功能

    激活/去激活activity
    注册/取消注册动态接受intent
    发送/取消发送intent
    activity生命周期管理(暂停,恢复,停止,销毁等)
    activity task管理(前台->后台,后台->前台,最近task查询,运行时task查询)
    激活/去激活service
    激活/去激活provider等

task管理相关API需要特定的权限,具体API可参考SDK文档。



 PackageManger 类

      说明: 获得已安装的应用程序信息 。可以通过getPackageManager()方法获得。


      常用方法:


        public abstract PackageManager getPackageManager()


               功能:获得一个PackageManger对象


        public abstrac  tDrawable    getApplicationIcon(String packageName)


               参数: packageName 包名


               功能:返回给定包名的图标,否则返回null


        public abstract ApplicationInfo getApplicationInfo(String packageName, int flags)


               参数:packagename 包名


                           flags 该ApplicationInfo是此flags标记,通常可以直接赋予常数0即可


               功能:返回该ApplicationInfo对象


        public abstract List<ApplicationInfo>  getInstalledApplications(int flags)


               参数:flag为一般为GET_UNINSTALLED_PACKAGES,那么此时会返回所有ApplicationInfo。我们可以对ApplicationInfo的flags过滤,得到我们需要的。


               功能:返回给定条件的所有PackageInfo


        public abstract List<PackageInfo>  getInstalledPackages(int flags)


               参数如上


               功能:返回给定条件的所有PackageInfo


        public abstractResolveInfo  resolveActivity(Intent intent, int flags)


                参数:  intent 查寻条件,Activity所配置的action和category


                        flags: MATCH_DEFAULT_ONLY:Category必须带有CATEGORY_DEFAULT的Activity,才匹配


                          GET_INTENT_FILTERS :匹配Intent条件即可


                          GET_RESOLVED_FILTER    :匹配Intent条件即可


                功能 :返回给定条件的ResolveInfo对象(本质上是Activity)


        public abstract  List<ResolveInfo>  queryIntentActivities(Intent intent, int flags)


                参数同上


                功能 :返回给定条件的所有ResolveInfo对象(本质上是Activity),集合对象


        public abstract ResolveInfo  resolveService(Intent intent, int flags)


           参数同上


           功能 :返回给定条件的ResolveInfo对象(本质上是Service)


        public abstract List<ResolveInfo> queryIntentServices(Intent intent, int flags)


          参数同上


          功能 :返回给定条件的所有ResolveInfo对象(本质上是Service),集合对象


 




  在网上收集了一些资料觉得挺不错的,给PackageManager类做一个补充




  PackageItemInfo类
    说明:AndroidManifest.xml文件中所有节点的基类,提供了这些节点的基本信息:a label、icon、 meta-data。它并不直接使用,而是由子类继承然后调用相应方法。


     常用字段:


            public int icon           获得该资源图片在R文件中的值 (对应于android:icon属性)


            public int labelRes       获得该label在R文件中的值(对应于android:label属性)


            public String name        获得该节点的name值 (对应于android:name属性)


            public String packagename 获得该应用程序的包名 (对应于android:packagename属性)


     常用方法:


            Drawable  loadIcon(PackageManager pm)          获得当前应用程序的图像


            CharSequence  loadLabel(PackageManager pm)     获得当前应用程序的label


 




  ActivityInfo类  继承自 PackageItemInfo


     说明: 获得应用程序中<activity/>或者 <receiver />节点的信息 。我们可以通过它来获取我们设置的任何属性,包括theme 、launchMode、launchmode等中的loadIcon()和loadLabel()


 




  ServiceInfo 类


     说明: 同ActivityInfo类似 ,同样继承自 PackageItemInfo,只不过它表示的是<service>节点信息。


 




  ApplicationInfo类 继承自  PackageItemInfo


     说明:获取一个特定引用程序中<application>节点的信息。


     字段说明:


      flags字段: FLAG_SYSTEM           系统应用程序


                 FLAG_EXTERNAL_STORAGE 表示该应用安装在sdcard中


     常用方法:继承至PackageItemInfo类中的loadIcon()和loadLabel()


 


 ResolveInfo类


     说明:根据<intent>节点来获取其上一层目录的信息,通常是<activity>、<receiver>、<service>节点信息。


     常用字段:


          public  ActivityInfo  activityInfo  获取 ActivityInfo对象,即<activity>或<receiver >节点信息


          public ServiceInfo   serviceInfo    获取 ServiceInfo对象,即<activity>节点信息


     常用方法:


          Drawable loadIcon(PackageManager pm)       获得当前应用程序的图像


          CharSequence loadLabel(PackageManager pm)  获得当前应用程序的label


 




  PackageInfo类


     说明:手动获取AndroidManifest.xml文件的信息 。


     常用字段:


          public String    packageName                  包名


          public ActivityInfo[]     activities          所有<activity>节点信息


          public ApplicationInfo applicationInfo        <application>节点信息,只有一个


          public ActivityInfo[]    receivers            所有<receiver>节点信息,多个


          public ServiceInfo[]    services              所有<service>节点信息 ,多个


ActivityManager 类:


             获取方法ActivityManager mActivityManager (ActivityManager)getSystemService(Context.ACTIVITY_SERVICE);


          常用的静态内部类如下(下面具体介绍):


                     ActivityManager.MemoryInfo: 系统可用内存信息


                      ActivityManager.RecentTaskInfo: 最近的任务信息


                      ActivityManager.RunningAppProcessInfo: 正在运行的进程信息


                      ActivityManager.RunningServiceInfo: 正在运行的服务信息


                      ActivityManager.RunningTaskInfo: 正在运行的任务信息


 常用方法:


public void getMemoryInfo(ActivityManager.MemoryInfo outInfo)


                说明:获取系统可用内存信息,数据封装在outInfo对象上


public Debug.MemoryInfo getProcessMemoryInfo(int[ ] pids


     说明:获取每个进程ID(集合)占用的内存大小(集合), pid和MemoryInfo是一一对应的。


     参数:pids 进程ID的集合           


PS :我们可以通过调用Debug.MemoryInfo 的dalvikPrivateDirty字段获取进程占用的内存大小(单位为KB)


 


 public List<ActivityManager.RunningAppProcessInfo>getRunningAppProcess()


    说明: 获取系统里正在运行的进程


public List<ActivityManager.RunningServiceInfo>getRunningServices(int maxNum)


     说明: 获取系统里所有正在运行的服务        


     参数:可能服务的最大值(赋予一常数即可,20、50都OK)


public List<ActivityManager.RunningTaskInfoo>getRunningTasks(int maxNum)


               说明:获取系统里正在运行的服务


               参数: 同上


public List<ActivityManager.RecentTaskInfo>getRecentTasks(int maxNum, int flags)


             说明:获取系统里最近启动的任务


             参数: 同上,flags一般为0即可


public voidkillBackgroundProcess(String packageName)


            说明:立即杀掉给定包名的进程,释放进程占用的资源(内存等),如果需要,系统会再次重新启动该进程。系统


            PS:系统进程是杀不死的,只能杀死用户进程。但我没有找到好的方法辨别系统进程还是用户进程。但可以肯定的是,


                   能够杀死的一定是用户进程。


          public void restartPackage(String packageName)


            说明:该方法已弃用,等同于killBackgroundProcess 。


 


 


 ActivityManager.MemoryInfo类


    常用字段:


            long availMem 系统可用内存


            long threshold系统内存不足的阀值,即临界值


            boolean lowMemory 如果当前可用内存<=threshold,该值为真


 


ActivityManager.RunningAppProcessInfo类


   常用字段:


          int pid                             进程ID


          int uid                             进程所在的用户ID


          String processName    进程名,默认是包名或者由android:process=””属性指定


          String [ ] pkgList           运行在该进程下的所有应用程序包名


       对ActivityManager.RecentTaskInfo 、ActivityManager.RunningServiceInfo 、ActivityManager.RunningTaskInfo


0 0
原创粉丝点击