80锁屏清理进程(重点)

锁屏清理进程是一个比较有用的功能,可以为用户节省很多的电量,锁屏清理进程也比定时清理进程优点多。说下思路:

判断用户是否锁屏需要注册一个广播接收者去监听,当然这个广播接收者放在服务里面比较好,试想如果放在Activity里面,当Activity执行onDestory()的时候,广播接收者就没了。而且这个广播接受者必须是代码注册。

package com.ustc.mobilemanager.service;

import java.util.List;

import android.app.ActivityManager;
import android.app.ActivityManager.RunningAppProcessInfo;
import android.app.Service;
import android.content.BroadcastReceiver;
import android.content.Context;
import android.content.Intent;
import android.content.IntentFilter;
import android.os.IBinder;
import android.util.Log;

public class AutoCleanService extends Service {
	public static final String TAG = "AutoCleanService";
	
	private ScreenOffReceiver receiver;
	
	private ActivityManager am;

	@Override
	public void onCreate() {
		
		am = (ActivityManager) getSystemService(ACTIVITY_SERVICE);
		
		receiver = new ScreenOffReceiver();
		
		IntentFilter filter = new IntentFilter(Intent.ACTION_SCREEN_OFF);
		
		registerReceiver(receiver, filter);
		super.onCreate();
	}

	@Override
	public IBinder onBind(Intent intent) {
		return null;
	}

	@Override
	public void onDestroy() {
		unregisterReceiver(receiver);
		receiver = null;
		super.onDestroy();
	}
	
	private class ScreenOffReceiver extends BroadcastReceiver{
		@Override
		public void onReceive(Context context, Intent intent) {
			Log.i(TAG, "屏幕锁屏啦!");
			List<RunningAppProcessInfo> infos = am.getRunningAppProcesses();
			for (RunningAppProcessInfo info : infos) {
				am.killBackgroundProcesses(info.processName);
			}
		}
		
	}

}

CheckBox的点击事件:

cb_auto_clean.setOnCheckedChangeListener(new OnCheckedChangeListener() {

			@Override
			public void onCheckedChanged(CompoundButton buttonView,
					boolean isChecked) {

				// 锁屏的广播事件是一个特殊的广播事件,在清单文件配置广播接受者是不会生效的
				// 锁屏的广播接受者必须在代码中注册(写在服务里)
				Intent intent = new Intent(TaskSettingActivity.this,
						AutoCleanService.class);
				if (isChecked) {
					startService(intent);
				} else {
					stopService(intent);
				}

			}
		});

CheckBox的状态与服务的生存期有关:

@Override
	protected void onStart() {

		boolean running = ServiceUtils.isServiceRunning(this,
				"com.ustc.mobilemanager.service.AutoCleanService");

		cb_auto_clean.setChecked(running);

		super.onStart();
	}


  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值