程序的运行流程:
IWeiboActivity接口:
1. init()方法
完成初始化
2, refresh(Objet...args)方法
完成窗体刷新
Task任务类:
定义程序中的任务
如:登录,发表新微博,获取用户微博,获取用户详细信息等各种任务
inttaskId//当前任务的ID
Mapparams//当前任务的参数
MainService(核心控制类)
1.MainService的主要功能
完成程序调度
接收UI层数据(任务),完成业务逻辑,返回信息,更新UI
在后台运行(继承自Service类)
线程(实现Runnable接口)
不断侦听UI传过来任务消息
2. MainService流程图预览
1.MainService的核心方法个变量
List<Activity> allActivity
保存当前所有Activity,方便切换
List<Task> allTask
把当前任务加到集合中
然后开启线程在Task中遍历任务 去执行任务
public void run() {
while (isrun) {
Task lastTask = null;
synchronized (allTask) {//这里有可能同时有多个任务并发 所以要加锁同步
if (allTask.size() > 0) {
lastTask = allTask.get(0);
Log.i("yanzheng", "任务ID" + lastTask.getTaskID());
doTask(lastTask);
}
}
// 每隔一秒钟检查是否有任务
try {
Thread.sleep(1000);
} catch (Exception e) {
}
}
当接线程发现任务会调用doTask(Tasktask)方法去执行任务
Message mess = hand.obtainMessage();
mess.what = task.getTaskID();//将当前任务的ID 放到Message中
mess.obj = Object object;//讲当前任务执行的结果放到message中
hand.sendMessage(mess);//发送当前消息
allTask.remove(task);//当前任务执行完毕 把任务从任务集合中remove
public void handleMessage(Message msg) 可以接收一个Message对象 (也就是我们doTask中传递的Message)
switch (msg.what) {
case Task.TASK_GET_USER_HOMETIMEINLINE://任务ID
//因为当前HomeActivity实现了IWeiboActivity这个接口,我们得到当前activity的实例,并调用它实现的刷新方法,同时讲参数传递过去,这里就实现了Service中刷新数据的方法了!
IWeiboActivity ia = (IWeiboActivity) MainService.getActivityByName("HomeActivity");
ia.refresh(HomeActivity.REFRESH_WEIBO, msg.obj);
break;