Srevice不是在子线程,在Srevice中做耗时操作一样ANR,然后我们就会用到IntentService,IntentSrevice不但擅长做耗时操作,还有一个特点,用完即走;

在Srevice中做耗时轮询操作,使用Handler:


  1. public class MyService extends Service {
  2. public MyService() {
  3. }
  4. @Override
  5. public IBinder onBind(Intent intent) {
  6. throw new UnsupportedOperationException("Not yet implemented");
  7. }
  8. @Override
  9. public void onCreate() {
  10. super.onCreate();
  11. }
  12. private Handler mHandler = new Handler(){
  13. @Override
  14. public void dispatchMessage(Message msg) {
  15. super.dispatchMessage(msg);
  16. switch (msg.what){
  17. case HANDLERSIGN:
  18. Log.i(TAG, "dispatchMessage: "+args+(++num));
  19. mHandler.sendEmptyMessageDelayed(HANDLERSIGN,HANDLERTIME);
  20. if (num == 5){
  21. AlertDialog.Builder builder = new AlertDialog.Builder(MyService.this);
  22. builder.setPositiveButton("确定", new DialogInterface.OnClickListener() {
  23. @Override
  24. public void onClick(DialogInterface dialogInterface, int i) {
  25. MyService.this.stopSelf();
  26. }
  27. });
  28. AlertDialog dialog = builder.create();
  29. dialog.setMessage("我的计数"+num);
  30. dialog.setTitle("提示");
  31. dialog.getWindow().setType(WindowManager.LayoutParams.TYPE_SYSTEM_ALERT);
  32. dialog.show();
  33. }
  34. break;
  35. }
  36. }
  37. };
  38. private final String TAG = "ccb";
  39. private String args;
  40. private int num;
  41. private final int HANDLERSIGN = 10;
  42. private final int HANDLERTIME = 2010;
  43. @Override
  44. public int onStartCommand(Intent intent, int flags, int startId) {
  45. args = intent.getStringExtra("args");
  46. initData();
  47. return super.onStartCommand(intent, flags, startId);
  48. }
  49. private void initData() {
  50. mHandler.sendEmptyMessageDelayed(HANDLERSIGN,HANDLERTIME);
  51. }
  52. @Override
  53. public void onDestroy() {
  54. super.onDestroy();
  55. Log.i(TAG, "onDestroy: 啊,ByKill");
  56. mHandler.removeCallbacksAndMessages(null);
  57. }
  58. }

在IntentSrevice中做耗时轮询操作,可以任性到这种程度:


  1. public class MyIntentService extends IntentService {
  2. public MyIntentService() {
  3. super("MyIntentService");
  4. }
  5. @Override
  6. public void onCreate() {
  7. super.onCreate();
  8. }
  9. private final String TAG = "ccb";
  10. private String args;
  11. private int num;
  12. @Override
  13. protected void onHandleIntent(Intent intent) {
  14. args = intent.getStringExtra("args");
  15. initData();
  16. }
  17. private void initData() {
  18. for (int i = 0; i < 30; i++) {
  19. try {
  20. Thread.sleep(3000);
  21. Log.i(TAG, "dispatchMessage: "+args+(++num));
  22. if (num == 5) {
  23. AlertDialog.Builder builder = new AlertDialog.Builder(MyIntentService.this);
  24. AlertDialog dialog = builder.setPositiveButton("确定", null).create();
  25. dialog.setMessage("我的计数" + num);
  26. dialog.setTitle("我是服务");
  27. dialog.getWindow().setType(WindowManager.LayoutParams.TYPE_SYSTEM_ALERT);
  28. dialog.show();
  29. return;
  30. }
  31. } catch (InterruptedException e) {
  32. e.printStackTrace();
  33. }
  34. }
  35. }
  36. @Override
  37. public void onDestroy() {
  38. super.onDestroy();
  39. Log.i(TAG, "onDestroy: MyIntentService");
  40. }
  41. }

IntentSrevice中的onHandlerIntent()方法走完就会销毁掉自己,立马走onDestroy()方法;

Service 和 IntentService的区别;的更多相关文章

  1. Service和IntentService的区别

    不知道大家有没有和我一样,以前做项目或者练习的时候一直都是用Service来处理后台耗时操作,却很少注意到还有个IntentService,前段时间准备面试的时候看到了一篇关于IntentServic ...

  2. Web Service和WCF的区别。其实二者不属于一个范畴!!!

    Web Service和WCF的区别 [1]Web Service:严格来说是行业标准,也就是Web Service 规范. 它有一套完成的规范体系标准,而且在持续不断的更新完善中. 它使用XML扩展 ...

  3. Web Service和ISAPI的区别与联系 转

    Web Service和ISAPI的区别与联系   1.Web Service 是一种新的web应用程序分支,他们是自包含.自描述.模块化的应用,可以发布.定位.通过web调用.Web Service ...

  4. Delphi Web Service和ISAPI的区别与联系 转

    Web Service和ISAPI的区别与联系   1.Web Service 是一种新的web应用程序分支,他们是自包含.自描述.模块化的应用,可以发布.定位.通过web调用.Web Service ...

  5. 多线程、Service与IntentService的比较

    资料摘自网络(侵删)     Service Thread IntentService AsyncTask When to use ? Task with no UI, but shouldn't b ...

  6. Android之Service与IntentService的比较

    Android之Service与IntentService的比较  不知道大家有没有和我一样,以前做项目或者练习的时候一直都是用Service来处理后台耗时操作,却很少注意到还有个IntentServ ...

  7. angularjs 中 Factory,Service,Provider 之间的区别

    本片文章是使用了 angularjs 中使用 service 在controller 之间 share 对象和数据 的code(http://jsfiddle.net/kn46u0uj/1/) 来进行 ...

  8. [Android] Service和IntentService中显示Toast的区别

    1. 表象     Service中可以正常显示Toast,IntentService中不能正常显示Toast,在2.3系统上,不显示toast,在4.3系统上,toast显示,但是不会消失. 2. ...

  9. Android Service、IntentService,Service和组件间通信

    Service组件 Service 和Activity 一样同为Android 的四大组件之一,并且他们都有各自的生命周期,要想掌握Service 的用法,那就要了解Service 的生命周期有哪些方 ...

随机推荐

  1. OSGI基础知识整理

    一.             简介: OSGi(Open Service Gateway Initiative)技术是面向Java的动态模型系统. OSGi的主要职责就是为了让开发者能够创建动态化.模 ...

  2. node api 之:fs

    fs.readFile() 函数会缓存整个文件. 为了最小化内存占用,尽可能优先使用 fs.createReadStream().

  3. Linux之chgrp

    命令功能: 在lunix系统里,文件或目录的权限的掌控以拥有者及所诉群组来管理.可以使用chgrp指令取变更文件与目录所属群组,这种方式采用群组名称或群组识别码都可以.Chgrp命令就是change  ...

  4. 基于redis 3.x搭建集群环境

    由于我团队开发的在线坐席系统,即将面对线上每周3000W的下行投放客户,产品的咨询量可能会很大,基于前期,200W的投放时,前10分钟,大概800问题量,平均一个客户大概8个问题,也就是说每分钟10个 ...

  5. redmine一键安装(项目管理、Bug管理、任务跟踪、代码管理、日报等等)

    1,下载一键安装包(64位系统) https://bitnami.com/stack/redmine 2,帮助文档(安装引导) http://www.360doc.com/content/15/033 ...

  6. 《LOST》 电视

    还没看正剧,所以转来帮助看电视 从起源到终点:<LOST>剧情全解析(一)   此文是LOST完结之后的剧情解析,剧透,慎入   从起源到终点:<LOST>剧情全解析(一) 转 ...

  7. Delphi代码模拟“显示桌面”的功能

    今天有人问我:“用shell打开文件(显示桌面.scf)的方式还是用模拟键盘(Win+D)显示桌面”这应该有更好的方法,就搜了搜,关键字定位“ToggleDesktop”因为显示桌面.scf的内容是: ...

  8. 自定义Write节点的beforerender属性

    由于nuke中的write节点提供了beforerender,afterrender这类事件,我们想添加一些功能只需要在这里面敲入代码即可.事件一旦发生,自然会触发我们敲入的code.   Write ...

  9. 最短路径算法——Dijkstra算法与Floyd算法

    转自:https://www.cnblogs.com/smile233/p/8303673.html 最短路径 ①在非网图中,最短路径是指两顶点之间经历的边数最少的路径. AE:1    ADE:2  ...

  10. javascript 判断是否移动客户端 userAgent isMobile

    var isMobile = { Android: function () { return (/android/i.test(navigator.userAgent.toLowerCase())); ...