【Android】一键清理后台实现【附源码】

【Android】⼀键清理后台实现【附源码】
整个程序很简单
只有⼀个CleanActivity,实现清理后台及并展⽰动画效果
⼀个桌⾯⼩部件,点击启动CleanActivity,实现同样效果
⼀.  CleanActivity的实现
1.  主程序布局
对应布局为⽂件为 R.layout.activity_clean
<RelativeLayout xmlns:android="schemas.android/apk/res/android"
xmlns:tools="schemas.android/tools"
android:layout_width="match_parent"
android:layout_height="match_parent"
android:gravity="center"
tools:context="${packageName}.${activityClass}" >
<ImageView
android:id="@+id/imageView_rotate"
android:layout_width="50dp"
android:layout_height="50dp"
android:scaleType="centerInside"
android:src="@drawable/icon_anim"
/>
</RelativeLayout>
上述布局只有⼀个ImageView, android:scaleType="centerInside" 这⼀⾏让图⽚⾃适应控件⼤⼩
android:theme="@android:style/Theme.Translucent.NoTitleBar"
2.  动画效果实现:
在res下新建anim⽬录,新建⼀个l来定义动画效果:旋转和放⼤
<?xml version="1.0" encoding="utf-8"?>
<set xmlns:android="schemas.android/apk/res/android">
<scale
android:interpolator="@android:anim/accelerate_decelerate_interpolator"
android:fromXScale="0.0"
android:toXScale="1.4"
android:fromYScale="0.0"
压电陶瓷片
android:toYScale="1.4"
android:pivotX="50%"
android:pivotY="50%"
android:duration="500"
/>
<rotate
android:interpolator="@android:anim/accelerate_decelerate_interpolator"
android:fromDegrees="0"
android:toDegrees="+360"
android:pivotX="50%"
android:pivotY="50%"
android:duration="2000"
/>
</set>
在CleanActivity.java的onCreate⽅法中加载动画
rotateImage=(ImageView)findViewById(R.id.imageView_rotate);
animation=AnimationUtils.loadAnimation(CleanActivity.this, R.anim.clean_anim);//加载动画 rotateImage.setAnimation(animation);
3.  清理后台功能实现
⽤ActivityManager对象获取系统正在运⾏的进程
遍历每个进程,在查每个进程下的相关程序包名(有些进程可能多个程序共享)
⽤killBackgroundProcesses()⽅法杀死该进程
这⼀⽅法需要在 l中加⼊权限
<uses-permission android:name="android.permission.KILL_BACKGROUND_PROCESSES" />
/*
* 杀死后台进程
*/
public void killAll(Context context){
//获取⼀个ActivityManager 对象
ActivityManager activityManager = (ActivityManager)
getSystemService(Context.ACTIVITY_SERVICE);
//获取系统中所有正在运⾏的进程
List<RunningAppProcessInfo> appProcessInfos = activityManager
.getRunningAppProcesses();
int count=0;//被杀进程计数
String nameList="";//记录被杀死进程的包名
long beforeMem = getAvailMemory(CleanActivity.this);//清理前的可⽤内存
Log.i(TAG, "清理前可⽤内存为 : " + beforeMem);
for (RunningAppProcessInfo appProcessInfo:appProcessInfos) {
nameList="";防伪胶带
if( ains("com.android.system")
||appProcessInfo.pid==android.Pid())//跳过系统及当前进程
continue;
String[] pkNameList=appProcessInfo.pkgList;//进程下的所有包名
for(int i=0;i<pkNameList.length;i++){
String pkName=pkNameList[i];
activityManager.killBackgroundProcesses(pkName);//杀死该进程
count++;//杀死进程的计数+1
nameList+="  "+pkName;
}
Log.i(TAG, nameList+"---------------------");
}
long afterMem = getAvailMemory(CleanActivity.this);//清理后的内存占⽤
Toast.makeText(CleanActivity.this, "杀死 " + (count+1) + " 个进程, 释放"
+ formatFileSize(afterMem - beforeMem) + "内存", Toast.LENGTH_LONG).show();
Log.i(TAG, "清理后可⽤内存为 : " + afterMem);
Log.i(TAG, "清理进程数量为 : " + count+1);
}
/*
* *获取可⽤内存⼤⼩
*/
private long getAvailMemory(Context context) {
// 获取android当前可⽤内存⼤⼩
ActivityManager am = (ActivityManager) SystemService(Context.ACTIVITY_SERVICE);        MemoryInfo mi = new MemoryInfo();
return mi.availMem;
}手机摄像头驱动
/*
线路板制作* *字符串转换 long-string KB/MB
*/
private String formatFileSize(long number){
return Formatter.formatFileSize(CleanActivity.this, number);
}
⼆.  桌⾯⼩部件的实现
1.  Widget的布局l
<?xml version="1.0" encoding="utf-8"?>
<LinearLayout xmlns:android="schemas.android/apk/res/android"
android:layout_width="wrap_content"
电子胶带
android:layout_height="wrap_content"
android:gravity="center_horizontal"
android:orientation="vertical" >
<ImageButton出水服务
android:id="@+id/imageButton_widget"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:scaleType="centerCrop"
android:background="#00000000"
android:src="@drawable/icon_widget" />
</LinearLayout>
再新建⼀个l定义插件属性
<?xml version="1.0" encoding="utf-8"?>
<appwidget-provider xmlns:android="schemas.android/apk/res/android"
android:minWidth="20dp"
android:minHeight="20dp"
android:updatePeriodMillis="86400000"
android:initialLayout="@layout/widget_layout"
>
</appwidget-provider>
minWidth和minHeight可以换算成桌⾯部件所占格⼦数,这⾥是1*1 updatePeriodMillis是部件的⾃动刷新时间,不过本例不需要
2.  在application元素下注册桌⾯插件
<receiver
android:name="CleanWidget"
android:label="@string/widget_name"
android:icon="@drawable/icon_widget">
<intent-filter >
<action android:name="android.appwidget.action.APPWIDGET_UPDATE"/>            </intent-filter>
<meta-data
android:name="android.appwidget.provider"
android:resource="@xml/widget_properties" />
</receiver>
3.  新建⼀个CleanWidget类继承AppWidgetProvider来实现⼩部件功能public class CleanWidget extends AppWidgetProvider{
@Override
public void onUpdate(Context context, AppWidgetManager appWidgetManager, int[] appWidgetIds ){
Intent intent=new Intent(context,CleanActivity.class);
PendingIntent Activity(context, 0, intent, 0);
RemoteViews remoteViews=new PackageName(),R.layout.widget_layout);
remoteViews.setOnClickPendingIntent(R.id.imageButton_widget, pendingIntent);//imagebutton控件绑定监听事件
//更新显⽰
if(appWidgetIds.length>0)
for(int appWidgetId:appWidgetIds)
appWidgetManager.updateAppWidget(appWidgetId, remoteViews);
}
}
三.  效果图
四、完整代码下载

本文发布于:2024-09-23 02:27:51,感谢您对本站的认可!

本文链接:https://www.17tex.com/tex/2/277038.html

版权声明:本站内容均来自互联网,仅供演示用,请勿用于商业和其他非法用途。如果侵犯了您的权益请与我们联系,我们将在24小时内删除。

标签:进程   实现   部件   动画   杀死   后台   效果
留言与评论(共有 0 条评论)
   
验证码:
Copyright ©2019-2024 Comsenz Inc.Powered by © 易纺专利技术学习网 豫ICP备2022007602号 豫公网安备41160202000603 站长QQ:729038198 关于我们 投诉建议