Android一键清理、内存清理功能实现-飞外
/***Constantfor{@link#importance}:thisisapersistentprocess.*Onlyusedwhenreportingtoprocessobservers.*@hide*/publicstaticfinalintIMPORTANCE_PERSISTENT=50;/***Constantfor{@link#importance}:thisprocessisrunningthe*foregroundUI.*/publicstaticfinalintIMPORTANCE_FOREGROUND=100;/***Constantfor{@link#importance}:thisprocessisrunningsomething*thatisactivelyvisibletotheuser,thoughnotintheimmediate*foreground.*/publicstaticfinalintIMPORTANCE_VISIBLE=200;/***Constantfor{@link#importance}:thisprocessisrunningsomething*thatisconsideredtobeactivelyperceptibletotheuser.An*examplewouldbeanapplicationperformingbackgroundmusicplayback.*/publicstaticfinalintIMPORTANCE_PERCEPTIBLE=130;/***Constantfor{@link#importance}:thisprocessisrunningan*applicationthatcannotsaveitsstate,andthuscan'tbekilled*whileinthebackground.*@hide*/publicstaticfinalintIMPORTANCE_CANT_SAVE_STATE=170;/***Constantfor{@link#importance}:thisprocessiscontainsservices*thatshouldremainrunning.*/publicstaticfinalintIMPORTANCE_SERVICE=300;/***Constantfor{@link#importance}:thisprocessprocesscontains*backgroundcodethatisexpendable.*/publicstaticfinalintIMPORTANCE_BACKGROUND=400;/***Constantfor{@link#importance}:thisprocessisemptyofany*activelyrunningcode.*/publicstaticfinalintIMPORTANCE_EMPTY=500;直接上代码:
importandroid.app.ActivityManager;importandroid.app.ActivityManager.MemoryInfo;importandroid.app.ActivityManager.RunningAppProcessInfo;importandroid.content.Context;importandroid.os.Bundle;importandroid.util.Log;importandroid.view.View;importandroid.widget.Button;importandroid.widget.Toast;importjava.util.List;publicclassClearMemoryActivityextendsActivity{privatestaticfinalStringTAG="ClearMemoryActivity";/***Calledwhentheactivityisfirstcreated.*/@OverridepublicvoidonCreate(BundlesavedInstanceState){super.onCreate(savedInstanceState);setContentView(R.layout.main);Buttonclear=(Button)findViewById(R.id.clear);clear.setOnClickListener(newView.OnClickListener(){@OverridepublicvoidonClick(Viewv){//TochangebodyofimplementedmethodsuseFile|Settings|FileTemplates.ActivityManageram=(ActivityManager)getSystemService(Context.ACTIVITY_SERVICE);List RunningAppProcessInfo infoList=am.getRunningAppProcesses();List ActivityManager.RunningServiceInfo serviceInfos=am.getRunningServices(100);longbeforeMem=getAvailMemory(ClearMemoryActivity.this);Log.d(TAG,"-----------beforememoryinfo:"+beforeMem);intcount=0;if(infoList!=null){for(inti=0;i infoList.size();++i){RunningAppProcessInfoappProcessInfo=infoList.get(i);Log.d(TAG,"processname:"+appProcessInfo.processName);//importance该进程的重要程度分为几个级别,数值越低就越重要。Log.d(TAG,"importance:"+appProcessInfo.importance);//一般数值大于RunningAppProcessInfo.IMPORTANCE_SERVICE的进程都长时间没用或者空进程了//一般数值大于RunningAppProcessInfo.IMPORTANCE_VISIBLE的进程都是非可见进程,也就是在后台运行着if(appProcessInfo.importance RunningAppProcessInfo.IMPORTANCE_VISIBLE){String[]pkgList=appProcessInfo.pkgList;for(intj=0;j pkgList.length;++j){//pkgList得到该进程下运行的包名Log.d(TAG,"Itwillbekilled,packagename:"+pkgList[j]);am.killBackgroundProcesses(pkgList[j]);count++;}}}}longafterMem=getAvailMemory(ClearMemoryActivity.this);Log.d(TAG,"-----------aftermemoryinfo:"+afterMem);Toast.makeText(ClearMemoryActivity.this,"clear"+count+"process,"+(afterMem-beforeMem)+"M",Toast.LENGTH_LONG).show();}});ClearMemoryFloatView.instance(getApplicationContext()).createView();}//获取可用内存大小privatelonggetAvailMemory(Contextcontext){//获取android当前可用内存大小ActivityManageram=(ActivityManager)context.getSystemService(Context.ACTIVITY_SERVICE);MemoryInfomi=newMemoryInfo();am.getMemoryInfo(mi);//mi.availMem;当前系统的可用内存//returnFormatter.formatFileSize(context,mi.availMem);//将获取的内存大小规格化Log.d(TAG,"可用内存---- "+mi.availMem/(1024*1024));returnmi.availMem/(1024*1024);}}注意:我这里选择阈值是IMPORTANCE_VISIBLE级别的,也就是非可见的后台进程和服务会被杀掉(一些系统进程肯定除外)。清理的效果跟金山清理大师和360桌面的一键清理效果差不多。如果不想杀的太凶,可以选择IMPORTANCE_SERVICE级别,杀掉那些长时间没用或者空进程了,这个级别的清理力度不够大,达不到金山清理大师的效果。
热门阅读
- 龙门古镇在哪里 0人看过
- 鸡蛋里面白色的东西是什么 0人看过
- 金桔核能吃吗 0人看过
- 生姜从地里挖出来后如何储存 0人看过
- 生蚝怎么存放过夜不死 0人看过
- 豆腐长黑毛还可以吃吗? 0人看过
- 3077代表什么 0人看过
- 茶里有咖啡因吗 0人看过
- 车厘子冷藏能放多久 0人看过
- 冬天水管子冻了怎么办 0人看过