Android项目实战--手机卫士32--给清理进程添加一个Widget

2024-06-09 15:48

本文主要是介绍Android项目实战--手机卫士32--给清理进程添加一个Widget,希望对大家解决编程问题提供一定的参考价值,需要的开发者们随着小编来一起学习吧!



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




上一次,我们已经完成了当用户锁屏的时候,就清理一下内存,那么今天,人们就把清理内存的这个功能给加到Widget里面去,

首先,先给大家讲一下Widget,widget就是运行在桌面上的小部件啦,由于运行在不同桌面(Android 的桌面有很多,如launch, 还有小米的米UI还有其他的定制机的呢)上,它的生命周期都会有所不同的,所以我这里就不说出来混淆大家啦,大家可以自己重写它里面的方法,观察一下就知道的啦

但是,要告诉大家,Widget第一次创建的时候,都会调用onEnable方法,然后,当桌面上已经没有这个Widget的时候,那就会调用onDisabled方法

好,下面先来看看,我们要做成的效果

  

这个界面比较的难看,大家可以自己定义一个好看的界面,这样子,看起来变好很多的啦

要把我们一键清理这个功能做成一个Widget,其实也很简单的

首先,我们就要写一个类ProcessWidget,来继承AppWidgetProvider,其实这个AppWidgetProvider它也是继承了BroadcastReceiver的,也就是说,它也是一个广播接收者来的,既然是一个广播接收者,那么,肯定就是要到AndroidMainfest里面注册它的啦

但是在注册之前,我们还有一件事要处理的,那就是在xml目录下面,定义一个xml文件,来指定一些Widget的信息

process_widget_info.xml

<?xml version="1.0" encoding="utf-8"?>
<appwidget-provider xmlns:android="http://schemas.android.com/apk/res/android"android:initialLayout="@layout/process_widget"android:minHeight="72dp"android:minWidth="294dp"android:updatePeriodMillis="0"></appwidget-provider>

上面我们指定了widget的布局文件啦,这个布局文件就是Widget显示出来的模样啦,我就不粘出来啦,大家可以下载来看看,还有最小的高度啦,最小的宽度啦,还有最后一个就是刷新的时间间隔啦,这里我们写了0,但我们后面会在代码里面用一个计时器来控制刷新的

写完这个文件之后,我们就可以去AndroidMainfest文件里面注册这个Widget啦

        <receiver android:name="com.xiaobin.security.receiver.ProcessWidget"><intent-filter><action android:name="android.appwidget.action.APPWIDGET_UPDATE" /></intent-filter><meta-data android:name="android.appwidget.provider"android:resource="@xml/process_widget_info"/></receiver>

就这样子,我们的Widget就注册完成的啦,那么接下来,我们就来写一下Widget要做的事啦

因为我们的Widget是清理进程,那么,还要读取进程的东西,这是一个耗时的操作,所以我们就定义一个服务来处理这些事

com.xiaobin.security.service.UpdateWidgetService

package com.xiaobin.security.service;import java.util.Timer;
import java.util.TimerTask;import android.app.PendingIntent;
import android.app.Service;
import android.appwidget.AppWidgetManager;
import android.content.ComponentName;
import android.content.Intent;
import android.os.IBinder;
import android.widget.RemoteViews;import com.xiaobin.security.R;
import com.xiaobin.security.receiver.ProcessClearReceiver;
import com.xiaobin.security.utils.ProcessUtil;public class UpdateWidgetService extends Service
{private Timer timer;private TimerTask timerTask;private AppWidgetManager appWidgetManager;private ComponentName componentName;private RemoteViews remoteViews;private Intent intent;private PendingIntent pendingIntent;@Overridepublic IBinder onBind(Intent intent){return null;}@Overridepublic void onCreate(){// 拿到一个AppWidgetManager对象appWidgetManager = AppWidgetManager.getInstance(getApplicationContext());// 拿到一个ComponentName对象componentName = new ComponentName("com.xiaobin.security","com.xiaobin.security.receiver.ProcessWidget");// 就是显示到桌面上的界面啦,所有布局是我们写的那个widget的布局remoteViews = new RemoteViews("com.xiaobin.security",R.layout.process_widget);// 这个intent是用来启动一个广播的,因为我们的winget是一键清理的嘛// 所以我们现在只要发送一条广播就可以调用里面的清理方法啦// 但我这里就不做啦,大家可以自己试试intent = new Intent(UpdateWidgetService.this, ProcessClearReceiver.class);// 拿到一个PendingIntent对象,来发送一条广播pendingIntent = PendingIntent.getBroadcast(getApplicationContext(), 0,intent, 0);// java传统的计时器timer = new Timer();timerTask = new TimerTask(){@Overridepublic void run(){//这里就没设置的们的process_widget这个布局文件里面的内容的啦//第一个参数就是设置的那个控件的id啦remoteViews.setTextViewText(R.id.tv_process_count, "进程数目:"+ ProcessUtil.getProcessCount(getApplicationContext()));remoteViews.setTextViewText(R.id.tv_process_memory, "可用内存:"+ ProcessUtil.getAvailMemory(getApplicationContext()));//这个就是给按钮加上点击事件啦remoteViews.setOnClickPendingIntent(R.id.bt_clear, pendingIntent);//更新widget里面的内容appWidgetManager.updateAppWidget(componentName, remoteViews);}};//开启计时器timer.scheduleAtFixedRate(timerTask, 1000, 3000);super.onCreate();}@Overridepublic void onDestroy(){//取消计时器timer.cancel();timer = null;timerTask = null;super.onDestroy();}}

上面的代码都有很详细的注释啦,大家可以看看,有不明白的可以问一下,

在这里,我要提醒一下大家,在我用的Android2.3的模拟器里面,那个Widget的显示是有问题的,所有我后来才换了4.1的模拟器来测试,所有大家发现如果Widget显示有问题,可以,换一下模拟器,

还有一个要注意的是,我们上面是通过PendingIntent来发送一个广播嘛,然后通过接收这条广播来进程清理内存,照理说我们已经有一个LockScreenReceiver的广播接收者来清理进程的啦,完全就可以发一条广播给它的,然后它就调用receiver方法来清理进程,但是,我在测试的时候发现不行的,我还在真机上,两个不同版本的模拟器上测试过,都是不行的,所以我们在这里就自己新写了一个广播接收者,它里面也很简单,就是清理一下进程而已,大家如果知道为什么发送给LockScreenReceiver不行的话,可以告诉我,我当时在这里测试了2,3个小时,都不行

com.xiaobin.security.receiver.ProcessClearReceiver

package com.xiaobin.security.receiver;import com.xiaobin.security.utils.ProcessUtil;import android.content.BroadcastReceiver;
import android.content.Context;
import android.content.Intent;public class ProcessClearReceiver extends BroadcastReceiver
{@Overridepublic void onReceive(Context context, Intent intent){//清理内存ProcessUtil.killAllProcess(context);}}

大家不要忘记了还要注册这个广播接收者的

<receiver android:name="com.xiaobin.security.receiver.ProcessClearReceiver"></receiver>


好啦,既然我们的服务写好啦,那么,我们就要控制它的开启与关闭啦

那么我们回到我们的 ProcessWidget类里面,我们重写它的onEnable和onDelete方法

com.xiaobin.security.receiver.ProcessWidget

package com.xiaobin.security.receiver;import android.appwidget.AppWidgetProvider;
import android.content.Context;
import android.content.Intent;import com.xiaobin.security.service.UpdateWidgetService;public class ProcessWidget extends AppWidgetProvider
{private Intent intent;@Overridepublic void onEnabled(Context context){super.onEnabled(context);//开启服务intent = new Intent(context, UpdateWidgetService.class);context.startService(intent);}@Overridepublic void onDeleted(Context context, int[] appWidgetIds){super.onDeleted(context, appWidgetIds);//停止服务intent = new Intent(context, UpdateWidgetService.class);context.stopService(intent);}}

上面我说过,不同的桌面,Widget的生命周期是有可能不同的,而且我上面也说啦,在Android2.3的模拟器里面,Widget显示是有问题的,我花了很长时间,发现,其实它是没有执行onEnable这个方法的,也就是说在Android2.3这个模拟器里面,它的生命同期是没有onEnable的,这应该是模拟器的一个bug来的,一般不可能会没有onEnable方法的,所以我们就要onEnable方法开启服务,当widget删除的时候,关闭服务


好啦,就这样子,我们的这个添加Widget的功能就完成的啦,那么我们的进程管理也完成的啦,还有很多的细节和优化,大家可以自己去做一下,下一次,我们就进行的流量管理的功能啦


最后,和大家说一下

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

群号是298440981



今天源码下载





这篇关于Android项目实战--手机卫士32--给清理进程添加一个Widget的文章就介绍到这儿,希望我们推荐的文章对编程师们有所帮助!



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

相关文章

网页解析 lxml 库--实战

lxml库使用流程 lxml 是 Python 的第三方解析库,完全使用 Python 语言编写,它对 XPath表达式提供了良好的支 持,因此能够了高效地解析 HTML/XML 文档。本节讲解如何通过 lxml 库解析 HTML 文档。 pip install lxml lxm| 库提供了一个 etree 模块,该模块专门用来解析 HTML/XML 文档,下面来介绍一下 lxml 库

这15个Vue指令,让你的项目开发爽到爆

1. V-Hotkey 仓库地址: github.com/Dafrok/v-ho… Demo: 戳这里 https://dafrok.github.io/v-hotkey 安装: npm install --save v-hotkey 这个指令可以给组件绑定一个或多个快捷键。你想要通过按下 Escape 键后隐藏某个组件,按住 Control 和回车键再显示它吗?小菜一碟: <template

如何用Docker运行Django项目

本章教程,介绍如何用Docker创建一个Django,并运行能够访问。 一、拉取镜像 这里我们使用python3.11版本的docker镜像 docker pull python:3.11 二、运行容器 这里我们将容器内部的8080端口,映射到宿主机的80端口上。 docker run -itd --name python311 -p

性能分析之MySQL索引实战案例

文章目录 一、前言二、准备三、MySQL索引优化四、MySQL 索引知识回顾五、总结 一、前言 在上一讲性能工具之 JProfiler 简单登录案例分析实战中已经发现SQL没有建立索引问题,本文将一起从代码层去分析为什么没有建立索引? 开源ERP项目地址:https://gitee.com/jishenghua/JSH_ERP 二、准备 打开IDEA找到登录请求资源路径位置

Android实现任意版本设置默认的锁屏壁纸和桌面壁纸(两张壁纸可不一致)

客户有些需求需要设置默认壁纸和锁屏壁纸  在默认情况下 这两个壁纸是相同的  如果需要默认的锁屏壁纸和桌面壁纸不一样 需要额外修改 Android13实现 替换默认桌面壁纸: 将图片文件替换frameworks/base/core/res/res/drawable-nodpi/default_wallpaper.*  (注意不能是bmp格式) 替换默认锁屏壁纸: 将图片资源放入vendo

C#实战|大乐透选号器[6]:实现实时显示已选择的红蓝球数量

哈喽,你好啊,我是雷工。 关于大乐透选号器在前面已经记录了5篇笔记,这是第6篇; 接下来实现实时显示当前选中红球数量,蓝球数量; 以下为练习笔记。 01 效果演示 当选择和取消选择红球或蓝球时,在对应的位置显示实时已选择的红球、蓝球的数量; 02 标签名称 分别设置Label标签名称为:lblRedCount、lblBlueCount

Android平台播放RTSP流的几种方案探究(VLC VS ExoPlayer VS SmartPlayer)

技术背景 好多开发者需要遴选Android平台RTSP直播播放器的时候,不知道如何选的好,本文针对常用的方案,做个大概的说明: 1. 使用VLC for Android VLC Media Player(VLC多媒体播放器),最初命名为VideoLAN客户端,是VideoLAN品牌产品,是VideoLAN计划的多媒体播放器。它支持众多音频与视频解码器及文件格式,并支持DVD影音光盘,VCD影

在cscode中通过maven创建java项目

在cscode中创建java项目 可以通过博客完成maven的导入 建立maven项目 使用快捷键 Ctrl + Shift + P 建立一个 Maven 项目 1 Ctrl + Shift + P 打开输入框2 输入 "> java create"3 选择 maven4 选择 No Archetype5 输入 域名6 输入项目名称7 建立一个文件目录存放项目,文件名一般为项目名8 确定

滚雪球学Java(87):Java事务处理:JDBC的ACID属性与实战技巧!真有两下子!

咦咦咦,各位小可爱,我是你们的好伙伴——bug菌,今天又来给大家普及Java SE啦,别躲起来啊,听我讲干货还不快点赞,赞多了我就有动力讲得更嗨啦!所以呀,养成先点赞后阅读的好习惯,别被干货淹没了哦~ 🏆本文收录于「滚雪球学Java」专栏,专业攻坚指数级提升,助你一臂之力,带你早日登顶🚀,欢迎大家关注&&收藏!持续更新中,up!up!up!! 环境说明:Windows 10

Vue3项目开发——新闻发布管理系统(六)

文章目录 八、首页设计开发1、页面设计2、登录访问拦截实现3、用户基本信息显示①封装用户基本信息获取接口②用户基本信息存储③用户基本信息调用④用户基本信息动态渲染 4、退出功能实现①注册点击事件②添加退出功能③数据清理 5、代码下载 八、首页设计开发 登录成功后,系统就进入了首页。接下来,也就进行首页的开发了。 1、页面设计 系统页面主要分为三部分,左侧为系统的菜单栏,右侧