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

创建自己的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
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值