一个简单的回调;一个简单的数据源和显示分层

好处:

1,数据源,控制逻辑和显示层分开,代码易于维护.activity仅仅显示界面,不干别的事情

2,代码易于理解,观看

3,不怕千变万化的ui设计,要做的仅仅是修改一下布局文件


MainActivity.java

package com.example.scanrunningprocess;

import com.example.scanrunningprocess.RunningProcessDriver.IProcessCallback;

import android.os.Bundle;
import android.app.Activity;
import android.view.Menu;
import android.widget.TextView;

public class MainActivity extends Activity implements IProcessCallback{

	private RunningProcessDriver mDriver;
	private TextView mTvShow;

	@Override
	protected void onCreate(Bundle savedInstanceState) {
		super.onCreate(savedInstanceState);
		setContentView(R.layout.activity_main);
		mTvShow = (TextView) findViewById(R.id.tv_processname);
		mDriver = new RunningProcessDriver(this, this);
		mDriver.startScan();
	}


	@Override
	public void startScanning() {
		mDriver.scanRunningProcess();
		System.out.println("扫描开始了");
	}

	@Override
	public void scannedProcess(String processName) {
		mTvShow.setText(processName);
	}

	@Override
	public void scanningInterupt() {
		System.out.println("扫描中断了");
		mDriver.setmIsInterupted(true);
	}

	@Override
	public void scanFinished() {
		System.out.println("扫描完成了");
		mTvShow.setText("扫描完成了");
	}

}

数据源和数据控制代码RunningProcessDriver.java

package com.example.scanrunningprocess;

import java.util.List;

import android.app.ActivityManager;
import android.app.ActivityManager.RunningAppProcessInfo;
import android.content.Context;
import android.os.Handler;
import android.os.Message;

public class RunningProcessDriver {

	protected static final int SCANNED_PROCESS = 0;
	protected static final int SCANNED_FINISHED = 1;
	protected static final int SCANNED_INTERUPTED = 2;
	private static final int SCAN_START = 3;
	private Context mContext;
	private IProcessCallback mCallback;
	// 扫描的过程是否中断
	private volatile boolean mIsInterupted;

	public RunningProcessDriver(Context context, IProcessCallback callback) {
		this.mContext = context;
		this.mCallback = callback;
	}

	interface IProcessCallback {
		void startScanning();

		void scannedProcess(String processName);

		void scanningInterupt();

		void scanFinished();
	}

	private Handler mH = new Handler() {
		public void handleMessage(android.os.Message msg) {
			switch (msg.what) {
			case SCANNED_PROCESS:
				mCallback.scannedProcess((String)msg.obj);
				break;

			case SCANNED_FINISHED:
				mCallback.scanFinished();
				break;
				
			case SCAN_START:
				mCallback.startScanning();
				break;
				
			default:
				break;
			}
		};
	};
	
	public void startScan(){
		Message msg = Message.obtain();
		msg.what = SCAN_START;
		mH.sendMessage(msg);
	}

	public void scanRunningProcess() {
		new Thread() {
			public void run() {
				ActivityManager am = (ActivityManager) mContext
						.getSystemService(Context.ACTIVITY_SERVICE);
				List<RunningAppProcessInfo> list = am.getRunningAppProcesses();
				for (RunningAppProcessInfo info : list) {
					if(mIsInterupted){
						return;
					}
					String processName = info.processName;
					
					try {//为了能看到扫描过程
						Thread.sleep(100);
					} catch (InterruptedException e) {
						e.printStackTrace();
					}
					
					//扫描进行中
					Message msg = Message.obtain();
					msg.what = SCANNED_PROCESS;
					msg.obj = processName;
					mH.sendMessage(msg);
				}
				
				//扫描完成
				Message msg = Message.obtain();
				msg.what = SCANNED_FINISHED;
				mH.sendMessage(msg);
			};
		}.start();
	}

	public boolean ismIsInterupted() {
		return mIsInterupted;
	}

	public void setmIsInterupted(boolean mIsInterupted) {
		this.mIsInterupted = mIsInterupted;
	}
	
	

}

工程地址       http://download.csdn.net/detail/qizhukanhai2/7298283

go

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值