Android熟悉使用PackageManager,ActivityManager,MemoryInfo,引入布局文件Include的使用,values的管理

工作内容:

1.熟练使用PackageManager,ActivityManager,Debug.MemoryInfo

2.获取系统内存

3.获取正在运行的进程情况

4.搭建手机加速页面

5.include引入两次同一个布局文件该这么去找到相应组件,传入不同的参数

6.对values文件(colors,styles,strings)的管理和使用

学习分享:

一、PackageManager

获取它的实例:PackageManager pm = Context.getPackageManager();

1.用于获取ApplicationInfo(根据包名,软件名称)

ApplicationInfo appInfo = pm.getApplicationInfo(rapi.processName, 0);
imaged = appInfo.loadIcon(pm); // 获取对应包的软件图标
name = appInfo .loadLabel(pm).toString();//获取对应的软件名称

2.用于获取已安装的软件信息

List<PackageInfo> packageInfos = pm.getInstalledPackages(0);
packageName = packageInfos.get(i).packageName;//获取已安装软件的包的路径(包名)通过此包名通过1可以获取对应的软件图标
version = packageInfos.get(i).versionName;//获取已安装软件的版本名称

3.获取应用名和图标的Drawable对象

mActivityManager = (ActivityManager) getSystemService(Context.ACTIVITY_SERVICE);
        List<RunningAppInfo> runningAppInfos = new ArrayList<RunningAppInfo>(); // 保存过滤查到的AppInfo
        pm = this.getPackageManager();
// 通过调用ActivityManager的getRunningAppProcesses()方法获得系统里所有正在运行的进程
        List<ActivityManager.RunningAppProcessInfo> appProcessList = mActivityManager
                .getRunningAppProcesses();// 通过调用ActivityManager的getRunningAppProcesses()方法获得系统里所有正在运行的进程
        List<ActivityManager.RunningAppProcessInfo> appProcessList = mActivityManager
                .getRunningAppProcesses();
//.....
for (ActivityManager.RunningAppProcessInfo appProcess : appProcessList) {
            int pid = appProcess.pid; // pid
            String processName = appProcess.processName; //应用包名/进程名
            try {
                appInfo = pm.getApplicationInfo(processName, 0);
                //判断是用户进程
//                if ((appInfo.flags & ApplicationInfo.FLAG_SYSTEM) == 0){
                    imageD = appInfo.loadIcon(pm);//应用图标的Drawable对象
                    packageName = appInfo.loadLabel(pm).toString();//应用名称
                    runningAppInfos.add(new RunningAppInfo(packageName, imageD, processName));
//                }
            } catch (PackageManager.NameNotFoundException e) {
                e.printStackTrace();
            }
        }

二、ActivityManager

获取它的实例:ActivityManager am = (ActivityManager) context.getSystemService(Context.ACTIVITY_SERVICE);

1.获取进程运行信息

List<ActivityManager.RunningAppProcessInfo> rsiList = am.getRunningAppProcesses();
PackageManager pm = context.getPackageManager();
for (ActivityManager.RunningAppProcessInfo rapi : rsiList) {
    //获取的进程分类是importance>100的进程(可在网上查阅其原因)
    if (rapi.importance > 100) {
        Debug.MemoryInfo memoryInfo = am.getProcessMemoryInfo(new int[]{rapi.pid})[0];
        //获取进程占用系统内存的大小
        long size = memoryInfo.getTotalPrivateDirty();//获取之后的单位是kb
        Drawable imaged = null; //定义放置对象的drawable的对象
        try {
            ApplicationInfo appInfo = pm.getApplicationInfo(rapi.processName, 0);
            imaged = appInfo.loadIcon(pm); //软件图标
        } catch (PackageManager.NameNotFoundException e) {
            imaged = context.getResources().getDrawable(R.drawable.ic_launcher);
        }
        //获取apk包名对应的应用程序名称
	ApplicationInfo appInfo = pm.getApplicationInfo(rapi.processName, 0);
	name = appInfo .loadLabel(pm).toString();//获取对应的软件名称
	//下面的判断是判断“不是系统进程”
	if ((rapi.uid & ApplicationInfo.FLAG_UPDATED_SYSTEM_APP) != 0)

三、获取手机RAM,ROM运行情况

实例:

//获取系统总外置存储空间大小(RAM)
public static long getMemoryAll() {
    File path = Environment.getDataDirectory();
    StatFs stat = new StatFs(path.getPath());
    long blockSize = stat.getBlockSize();
    long totalBlocks = stat.getBlockCount();
    return totalBlocks * blockSize;
}

//获取系统剩余外置存储空进(RAM)
public static long getMemoryCanUse() {
    File path = Environment.getDataDirectory();
    StatFs stat = new StatFs(path.getPath());
    long blockSize = stat.getBlockSize();
    long availableBlocks = stat.getAvailableBlocks();
    return availableBlocks * blockSize;
}

//获取系统总内置存储空间大小(ROM)
public static long getRomAll() {
    String dir = "/proc/meminfo";
    try {
        FileReader fr = new FileReader(dir);
        BufferedReader br = new BufferedReader(fr, 2048);
        String memoryLine = br.readLine();
        String subMemoryLine = memoryLine.substring(memoryLine.indexOf("MemTotal:"));
        br.close();
        return Integer.parseInt(subMemoryLine.replaceAll("\\D+", "")) * 1024l;
    } catch (IOException e) {
        e.printStackTrace();
    }
    return 0;
}

//获取系统可用内置存储空间大小(ROM)
public static long getRomCanUse(Context context) {
    ActivityManager am = (ActivityManager) context.getSystemService(Context.ACTIVITY_SERVICE);
    ActivityManager.MemoryInfo outInfo = new ActivityManager.MemoryInfo();
    // 获取手机运行内存大小
    am.getMemoryInfo(outInfo);
    long avail = outInfo.availMem; // byte
    return avail;
}

四、同一个页面中使用2次include同一个布局文件,并为布局文件中的组件设置参数

你include两次要分别命名成为不同的id
然后你首先 用findViewById得到这两个layout的view
View viewA = findViewById( R.id.layout_a);
View viewB = findViewById( R.id.layout_b);
然后你想得到每一个layout里面的控件时调用,比如你有一个TextView
TextView tv = viewA.findViewById( R.id.tv);
TextView tv2 = viewB.findViewById( R.id.tv);
这样你就可以获取对象引用了。 ... 

五、 对values文件(colors,styles,strings)的管理和使用

带来好处:

1.在组件上调用已经在values文件中配置好的数据,可以使界面的xml文件看起来很简洁。

2.在以后需要去更新的时候可以很简单的去改(只需改alues文件中中配置即可),xml中自动改变。

如何管理:

1.针对每个页面(Activity)写一个values文件,起名与Activity名称有关联。

2.colors,styles,strings定义名称都可以以Activity名称的简写开头,这样,在调用时能快速找到。

实例:

<?xml version="1.0" encoding="utf-8"?>
<resources>
    <!--取名规范(自定义)Activity名称简写 + [include]相应简写 + 内容-->
    <string name="softmanager_top_mermoryinfo">手机空间分配情况</string>
    <string name="softmanager_top_rominfo">内置空间</string>
    <string name="softmanager_top_raminfo">外置空间</string>

    <string name="softmanager_pb_rominfo">内置空间(已使用/全部)</string>
    <string name="softmanager_pb_raminfo">外置空间(已使用/全部)</string>

    <string name="softmanager_allsoft">所有软件</string>
    <string name="softmanager_syssoft">系统软件</string>
    <string name="softmanager_usersoft">用户软件</string>
  
    <style name="softmanager_tv">
        <item name="android:layout_width">match_parent</item>
        <item name="android:layout_height">wrap_content</item>
        <item name="android:layout_weight">1</item>
        <item name="android:textSize">22dp</item>
        <item name="android:textColor">#333</item>
        <item name="android:gravity">center_vertical</item>
        <item name="android:drawableRight">@drawable/ic_arrows_right</item>
        <item name="android:layout_marginTop">1dp</item>
        <item name="android:background">@drawable/pressed_tv</item>
    </style>
    <style name="sortmanager_top_text">
        <item name="android:layout_height">wrap_content</item>
        <item name="android:layout_width">wrap_content</item>
        <item name="android:textSize">17sp</item>
        <item name="android:textColor">#000</item>
        <item name="android:layout_weight">1</item>
        <item name="android:layout_marginLeft">5dp</item>
        <item name="android:layout_gravity">center_vertical</item>
    </style>
</resources>


  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值