创建自己的MainService继承 Service和Runable接口
0.1 activity启动MainService服务
0.2 MainService 启动run()函数
1. activity发出任务吧任务放入到task队列中
2.run()函数不断监听Task队列(以一种先进先出的方式)取出一个任务(队列中这个任务就被删除了)
3. doTask()函数负责处理任务 并发给主线程消息(也就是handler)
4. handleMessage()函数处理UI的操作
service代码
public class MainService extends Service implements Runnable {
//任务队列
private static Queue<Task> tasks = new LinkedList<Task>();
//activity 集合
private static ArrayList<Activity> appActivity = new ArrayList<>();
// is Run thread ?
private boolean isRun;
Handler handler = new Handler()
{
public void handleMessage(android.os.Message message)
{
switch (message.what)
{
//用户登录
case Task.WEIBO_LOGO :
IWeiboActivity activity = (IWeiboActivity) getActivityByName("LoginActivity");
activity.refresh(message.obj);
break;
default:
break;
}
}
};
//添加到activity集合
public static void addActivity(Activity activity)
{
appActivity.add(activity);
}
/**
* 添加任务
* @param task
*/
public static void newTask(Task task)
{
tasks.add(task);
}
//根据activity的name获取activity
private Activity getActivityByName(String name)
{
if (!appActivity.isEmpty())
{
for (Activity activity :appActivity)
{
if (null != activity)
{
if (activity.getClass().getName().indexOf(name)>0)
{
return activity;
}
}
}
}
return null;
}
@Override
public void onCreate()
{
isRun = true;
Thread thread = new Thread(this);
thread.start();
super.onCreate();
}
@Override
public IBinder onBind(Intent intent) {
return null;
}
@Override
public void run() {
while(isRun)
{
Task task = null;
if (!tasks.isEmpty())
{
task = tasks.poll(); //执行完任务后移除该任务
if (task != null)
{
doTask(task);
}
}
try {
Thread.sleep(1000);
} catch (InterruptedException e) {
}
}
}
//处理task任务
private void doTask(Task task)
{
Message message = handler.obtainMessage();
message.what = task.getTaskId();
switch (task.getTaskId())
{
case Task.WEIBO_LOGO:
System.out.print("----------------------WEIBO_LOGO");
message.obj = "登录success";
break;
default:
break;
}
handler.sendMessage(message);
}
}
</pre><pre name="code" class="java">
</pre><h5><strong>activity代码</strong></h5><div><strong></strong></div><div><strong></strong></div><div><strong></strong></div><pre name="code" class="java">public class LoginActivity extends Activity implements IWeiboActivity{
@Override
public void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.logo_layout);
//启动主服务
Intent intent = new Intent(this, MainService.class);
this.startService(intent);
Button _btnLogin = (Button)findViewById(R.id.btnLogin);
_btnLogin.setOnClickListener(new View.OnClickListener() {
@Override
public void onClick(View v) {
Task task = new Task(Task.WEIBO_LOGO,null);
MainService.newTask(task);
}
});
//把自己放入到activity集合里
MainService.addActivity(this);
}
@Override
public void init() {
}
@Override
public void refresh(Object... params) {
TextView _textViewLogin = (TextView) this.findViewById(R.id.textViewLogin);
_textViewLogin.setText(params[0].toString());
}
}
IWeiboActivity接口
/**
* activity 接口
* Created by rabook on 2016/9/6.
*/
public interface IWeiboActivity {
//初始化数据
void init();
//刷新UI
void refresh(Object... params);
}