学习笔记 新浪微博篇 一 Android Service流程

来源:互联网 发布:安阳日报社 网络投稿 编辑:程序博客网 时间:2024/06/01 22:55

创建自己的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);}


0 0