学习笔记 新浪微博篇 一 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
- 学习笔记 新浪微博篇 一 Android Service流程
- 学习笔记 新浪微博篇 四 Android TableHost
- Android 学习笔记 Service (一) Local Service
- Service学习笔记(一)
- 学习笔记 新浪微博篇 问题篇一 文件不存在c8998
- android service学习一
- Android Service学习笔记
- Android Service学习笔记
- Android Service学习笔记
- android service 学习笔记
- Android学习笔记 - Service
- Android学习笔记-Service
- android Service学习笔记
- Android Service学习笔记
- Android学习笔记-service进程间通信(一)
- Android四大组件之Service服务学习笔记(一)
- 学习笔记 新浪微博篇 三 Android SQLiteOpenHelper 类详解
- 学习笔记 新浪微博篇 五 Android 利用RadioGroup自定义TableHost
- 240. Search a 2D Matrix II
- 【C++ STL学习与应用总结】22: 函数组合之1:如何使用std::bind (since C++11)
- 常用排序算法总结10一一桶排序
- Fragment小结
- jQuery验证控件jquery.validate.js使用说明+中文API
- 学习笔记 新浪微博篇 一 Android Service流程
- 13 关于HttpClient自动保存Cookie
- linux NAND驱动之一:内核中的NAND代码布局
- 滴滴2016 笔试题 编程题1 求路过的大神指教
- HTTPS那些事(一)HTTPS原理
- csuoj1812: 三角形和矩形
- C++多态需求的引入
- Java语言基础二
- Windows安装Composer