好处:
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