看以前同事写了个基类 感觉每次 获取网络数据和异步操作都new 一条线程,感觉对性能以及APP 的 内存 感觉有很大的占用,所以今天写了一个用线程池管理的基类 希望对大家有所帮助下面上code
package com.sqbc.tong.impl;
import java.util.concurrent.ExecutorService;
import java.util.concurrent.Executors;
import com.sqbc.tong.activity.IActivity;
import android.os.Bundle;
import android.os.Handler;
import android.os.Message;
import android.support.v4.app.FragmentActivity;
import android.view.Window;
/**
* 此基类用于线程池管理管理线程需要添加什么dialog啦 什么东西的自行添加
*
* @author 张红亮
*
*/
public class ExecutorServiceBaseActivity extends FragmentActivity implements
IActivity {
private ExecutorService executorService = null;
@Override
protected void onCreate(Bundle arg0) {
// TODO Auto-generated method stub
this.requestWindowFeature(Window.FEATURE_NO_TITLE);
executorService = Executors.newFixedThreadPool(2);// 最大线程数自行设置控制线程条数
init();
}
public void init() {
}
@Override
public void runLoadThread(int messageId) {
// TODO Auto-generated method stub
executorService.submit(new MyThread(messageId));
}
@Override
public void refresh(int messageId, Object params) {
// TODO Auto-generated method stub
}
/**
* The handler for refresh UI.
*/
protected Handler mHandler = new Handler() {
@Override
public void handleMessage(Message msg) {
refresh(msg.what, msg.obj);
}
};
/**
* runnable
* @author Administrator
*
*/
class MyThread implements Runnable {
private int mMessageId = 0;
MyThread(int messageId) {
this.mMessageId = messageId;
}
@Override
public void run() {
Message msg = Message.obtain();
msg.what = mMessageId;
// Load data for the activity.
msg.obj = loadData(mMessageId);
mHandler.sendMessage(msg);
}
}
/**
* 线程内部访问的方法
* @param messageId
* @return
*/
public Object loadData(int messageId) {
return null;
}
/**
* finish activity
*/
public void back() {
this.finish();
}
}
下面是定义的接口
package com.sqbc.tong.activity;
public interface IActivity {
/**
* Start to run the thread that is to load data for UI.
*/
public void runLoadThread(int messageId);
/**
* Refresh UI.
*
* @param params
*/
public void refresh(int messageId, Object params);
}
希望对大家有所帮助!