Android项目实战--手机卫士27--拿到剩余内存以及正在运行的进程数

本文主要是介绍Android项目实战--手机卫士27--拿到剩余内存以及正在运行的进程数,希望对大家解决编程问题提供一定的参考价值,需要的开发者们随着小编来一起学习吧!



最新实战教程,让你了解Android自动化刷量、作弊与防作弊的那些事,案例:刷友盟统计、批量注册苹果帐号




昨天, 我们已经把程序锁这个功能给完成了,那么今天,我们就来做一下进程管理的功能,其实就是通过一个ActivityManager的对象来获取到这些信息的,所以也是挺简单的。

那么我们现在就来写一下这些代码。

首先,我们先来回顾一下我们之前说的,自定义title,我们是通过隐藏系统自己的title,然后再布局文件里面增加一些控件来达到自定义title的作用的,那么今天我们就讲一下另一种自定义title的方式。

		// 请求一个自己定义的title,但有一些Android系统是被修改过的,// 所以有可能是无法请求的,如乐Phone或小米的手机,这些系统是被修改过的,// 所以就要判断一下是否请求成功boolean flags = requestWindowFeature(Window.FEATURE_CUSTOM_TITLE);setContentView(R.layout.process_manager);if (flags){// 设置自定义的titlegetWindow().setFeatureInt(Window.FEATURE_CUSTOM_TITLE,R.layout.process_manager_title);}

大家可以看到,我们就是通过下面的几行代码来进行自定义title的,那么现在我们就学会了两种自定义title的方法啦,大家可以根据自己的需要来选择使用


上面只是设置好那个定义的代码,我们还要设置一下它的样式,不然就会只有25dip的啦,如何知道应该怎样设置这些值呢,我们之前讲过的,如果有什么不明白的,可以回去看我们之前的文章(自定义对话框),那么我们自定义title要修改的值也就只有两个啦



我们主要修改的也就是上面选定了的内容而已,所以我们现在在我们的style.xml里面写上几句样式

sytle.xml

    <style name="MyTitleBar" parent="@android:style/Theme"><item name="android:windowTitleSize">40dip</item><item name="android:windowTitleBackgroundStyle">@drawable/title_background</item></style>

那么我们写好了这些style就要应用它啦,那么我们是在那里应用它呢,就是在我们的activity的声明的时候啦,也就是在AndroidMainfest文件里面应用我们的style啦

AndroidMainfest.xml

        <activity android:theme="@style/MyTitleBar"android:label="@string/process_manager"android:name="com.xiaobin.security.ui.ProcessManagerActivity"></activity>

就这样子,我们的另一种自定义title就完成的啦,现在我们可以先给大家看看效果啦


好啦,上面的效果和我们隐藏自带的title, 然后自己用控件来实现差不多,大家可以根据自己的需要来选择实现方式


那么接下来,我们就要讲一下我们今天的主要内容啦,今天我们就是要把手机里面已经运行了的应用数目,以及手机里面剩余的内存数目啦

其实要拿到手机里面已经运行了的进程数目也很简单,只要我们拿到一个activityManager对象,然后再调用它的一个方法就可以的了

	//拿到当前运行的进程数目private int getRunningAppCount(){runningAppProcessInfos = activityManager.getRunningAppProcesses();return runningAppProcessInfos.size();}

activityManager.getRunningAppProcesses()拿到的是一个List<RunningAppProcessInfo>的列表,也就是运行的进程的信息的对象了,所以只要知道这个list里面有多少个对象,就可以知道有多少个进程在运行啦


拿到剩余的内存也比较简单,也是通过activityManager来获取的

	//拿到系统剩余的内存private String getAvailMemory(){//new一个内存的对象MemoryInfo memoryInfo = new ActivityManager.MemoryInfo();//拿到现在系统里面的内存信息activityManager.getMemoryInfo(memoryInfo);//拿到有效的内存空间long size = memoryInfo.availMem;return TextFormater.dataSizeFormat(size);}

大家可以看到,我们上面用了一个TextFormater的类,这个类是我们用来转换单位的啦

com.xiaobin.security.utils.TextFormater

package com.xiaobin.security.utils;import java.text.DecimalFormat;public class TextFormater
{public static String dataSizeFormat(long size){DecimalFormat formater = new DecimalFormat("####.00");if(size < 1024){return size + "byte";}else if(size < (1 << 20)) //左移20位,相当于1024 * 1024{float kSize = size >> 10; //右移10位,相当于除以1024return formater.format(kSize) + "KB";}else if(size < (1 << 30)) //左移30位,相当于1024 * 1024 * 1024{float mSize = size >> 20; //右移20位,相当于除以1024再除以1024return formater.format(mSize) + "MB";}else if(size < (1 << 40)){float gSize = size >> 30;return formater.format(gSize) + "GB";}else{return "size : error";}}}

好啦,到这里为止,我们的读取进程数目与读取剩余内存的数目就讲完的啦,下面我们把完整的activity和布局文件粘出来

com.xiaobin.security.ui.ProcessManagerActivity

package com.xiaobin.security.ui;import java.util.List;import android.app.Activity;
import android.app.ActivityManager;
import android.app.ActivityManager.MemoryInfo;
import android.app.ActivityManager.RunningAppProcessInfo;
import android.content.Context;
import android.os.Bundle;
import android.view.Window;
import android.widget.TextView;import com.xiaobin.security.R;
import com.xiaobin.security.utils.TextFormater;public class ProcessManagerActivity extends Activity
{private TextView tv_process_count;private TextView tv_process_memory;private ActivityManager activityManager;private List<RunningAppProcessInfo> runningAppProcessInfos;@Overrideprotected void onCreate(Bundle savedInstanceState){super.onCreate(savedInstanceState);activityManager = (ActivityManager) getSystemService(Context.ACTIVITY_SERVICE);// 请求一个自己定义的title,但有一些Android系统是被修改过的,// 所以有可能是无法请求的,如乐Phone或小米的手机,这些系统是被修改过的,// 所以就要判断一下是否请求成功boolean flags = requestWindowFeature(Window.FEATURE_CUSTOM_TITLE);setContentView(R.layout.process_manager);if (flags){// 设置自定义的titlegetWindow().setFeatureInt(Window.FEATURE_CUSTOM_TITLE,R.layout.process_manager_title);}tv_process_count = (TextView) findViewById(R.id.tv_process_count);tv_process_memory = (TextView) findViewById(R.id.tv_process_memory);initTitle();}//拿到当前运行的进程数目private int getRunningAppCount(){runningAppProcessInfos = activityManager.getRunningAppProcesses();return runningAppProcessInfos.size();}//拿到系统剩余的内存private String getAvailMemory(){//new一个内存的对象MemoryInfo memoryInfo = new ActivityManager.MemoryInfo();//拿到现在系统里面的内存信息activityManager.getMemoryInfo(memoryInfo);//拿到有效的内存空间long size = memoryInfo.availMem;return TextFormater.dataSizeFormat(size);}//设置title的信息private void initTitle(){tv_process_count.setText("进程数目:" + getRunningAppCount());tv_process_memory.setText("剩余内存:" + getAvailMemory());}}

process_manager.xml

<?xml version="1.0" encoding="utf-8"?>
<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"android:layout_width="match_parent"android:layout_height="match_parent"android:background="@android:color/white"android:orientation="vertical" ></LinearLayout>

process_manager_title.xml

<?xml version="1.0" encoding="utf-8"?>
<RelativeLayout xmlns:android="http://schemas.android.com/apk/res/android"android:layout_width="match_parent"android:layout_height="40dip"android:gravity="center_vertical"android:background="@drawable/title_background" ><TextView android:id="@+id/tv_process_count"android:layout_width="wrap_content"android:layout_height="wrap_content"android:layout_alignParentLeft="true"android:layout_marginLeft="10dip"android:textColor="@android:color/white"android:text="@string/process_count"/><TextView android:id="@+id/tv_process_memory"android:layout_width="wrap_content"android:layout_height="wrap_content"android:layout_alignParentRight="true"android:layout_marginRight="10dip"android:textColor="@android:color/white"android:text="@string/process_memory"/></RelativeLayout>

好啦,今天就讲到这里啦,接下来,我们都会讲这个进程管理的内容的啦


最后,和大家说一下

为了方便大家的交流,我创建了一个群,这样子大家有什么疑问也可以在群上交流

群号是298440981



今天源码下载




这篇关于Android项目实战--手机卫士27--拿到剩余内存以及正在运行的进程数的文章就介绍到这儿,希望我们推荐的文章对编程师们有所帮助!



http://www.chinasem.cn/article/1045608

相关文章

Golang操作DuckDB实战案例分享

《Golang操作DuckDB实战案例分享》DuckDB是一个嵌入式SQL数据库引擎,它与众所周知的SQLite非常相似,但它是为olap风格的工作负载设计的,DuckDB支持各种数据类型和SQL特性... 目录DuckDB的主要优点环境准备初始化表和数据查询单行或多行错误处理和事务完整代码最后总结Duck

Java内存泄漏问题的排查、优化与最佳实践

《Java内存泄漏问题的排查、优化与最佳实践》在Java开发中,内存泄漏是一个常见且令人头疼的问题,内存泄漏指的是程序在运行过程中,已经不再使用的对象没有被及时释放,从而导致内存占用不断增加,最终... 目录引言1. 什么是内存泄漏?常见的内存泄漏情况2. 如何排查 Java 中的内存泄漏?2.1 使用 J

Python中的随机森林算法与实战

《Python中的随机森林算法与实战》本文详细介绍了随机森林算法,包括其原理、实现步骤、分类和回归案例,并讨论了其优点和缺点,通过面向对象编程实现了一个简单的随机森林模型,并应用于鸢尾花分类和波士顿房... 目录1、随机森林算法概述2、随机森林的原理3、实现步骤4、分类案例:使用随机森林预测鸢尾花品种4.1

Python 中 requests 与 aiohttp 在实际项目中的选择策略详解

《Python中requests与aiohttp在实际项目中的选择策略详解》本文主要介绍了Python爬虫开发中常用的两个库requests和aiohttp的使用方法及其区别,通过实际项目案... 目录一、requests 库二、aiohttp 库三、requests 和 aiohttp 的比较四、requ

SpringBoot项目启动后自动加载系统配置的多种实现方式

《SpringBoot项目启动后自动加载系统配置的多种实现方式》:本文主要介绍SpringBoot项目启动后自动加载系统配置的多种实现方式,并通过代码示例讲解的非常详细,对大家的学习或工作有一定的... 目录1. 使用 CommandLineRunner实现方式:2. 使用 ApplicationRunne

使用IntelliJ IDEA创建简单的Java Web项目完整步骤

《使用IntelliJIDEA创建简单的JavaWeb项目完整步骤》:本文主要介绍如何使用IntelliJIDEA创建一个简单的JavaWeb项目,实现登录、注册和查看用户列表功能,使用Se... 目录前置准备项目功能实现步骤1. 创建项目2. 配置 Tomcat3. 项目文件结构4. 创建数据库和表5.

Python项目打包部署到服务器的实现

《Python项目打包部署到服务器的实现》本文主要介绍了PyCharm和Ubuntu服务器部署Python项目,包括打包、上传、安装和设置自启动服务的步骤,具有一定的参考价值,感兴趣的可以了解一下... 目录一、准备工作二、项目打包三、部署到服务器四、设置服务自启动一、准备工作开发环境:本文以PyChar

python多进程实现数据共享的示例代码

《python多进程实现数据共享的示例代码》本文介绍了Python中多进程实现数据共享的方法,包括使用multiprocessing模块和manager模块这两种方法,具有一定的参考价值,感兴趣的可以... 目录背景进程、进程创建进程间通信 进程间共享数据共享list实践背景 安卓ui自动化框架,使用的是

多模块的springboot项目发布指定模块的脚本方式

《多模块的springboot项目发布指定模块的脚本方式》该文章主要介绍了如何在多模块的SpringBoot项目中发布指定模块的脚本,作者原先的脚本会清理并编译所有模块,导致发布时间过长,通过简化脚本... 目录多模块的springboot项目发布指定模块的脚本1、不计成本地全部发布2、指定模块发布总结多模

SpringBoot项目删除Bean或者不加载Bean的问题解决

《SpringBoot项目删除Bean或者不加载Bean的问题解决》文章介绍了在SpringBoot项目中如何使用@ComponentScan注解和自定义过滤器实现不加载某些Bean的方法,本文通过实... 使用@ComponentScan注解中的@ComponentScan.Filter标记不加载。@C