1.服务是Android中实现程序后台运行的解决方案,适用于执行不需要和用户交互而且要长期运行的任务。

2.服务的运行不依赖于任何用户界面,或切到后台,或用户打开了另外一个应用程序,服务能够保持正常运行。

3.服务不是运行在一个独立的进程中,是依赖于创建服务时所在的应用程序进程,进程被杀掉,依赖于该进程的服务会停止运行。

4.服务并不会自动开启线程,代码默认运行在主线程中。也即需要在服务的内部手动创建子线程,在这里执行具体任务,否则有

可能出现主线程被阻塞。

5.多线程例子:需要执行一些耗时操作,比如说发起一条网络请求时,考虑到网速等其他原因,服务器未必会立刻响应请求,若

不将子类操作放在子线程里运行,就会导致主线程阻塞住,从而影响用户对软件的正常使用。

6.Android中多线程和Java类似,如定义一个线程只需要新建一个类继承自Thread,然后重写父类的run()方法,并在里面编写耗时

逻辑,如下:

class MyThread extends Thread {
@Override
public void run() {
//处理具体的逻辑
}
}

如何启动线程:简单,new出MyThread的实例,然后调用start()方法,如此run()方法的代码会在子线程中运行,如下:

new MyThread().start();

7.然而,使用继承的耦合性略高,大部分时候选择使用实现Runnable接口的方式定义一个线程,如下:

class MyThread implements Runnable {
@Override
public void run() {
//处理具体的逻辑
}
}

使用该法,启动线程方法需要改变,如下:

MyThread myTread = new MyThread();
new Thread(myThread).start();

Thread的构造函数接收一个Runnable参数,而new出的MyThread实现了Runnable接口的对象,直接将它传入到Thread的构造函数

里。接着调用Thread的start()方法,run()方法中的代码就会在子线程中运行。

8.若不想专门定义一个类去实现Runnable接口,可以使用匿名类的方式,如下:

new Thread(new Runnable() {
@Override
public void run() {
//处理具体的逻辑
}
}).start();

最新文章

  1. SOA 实现:服务设计原则
  2. redis 原子增一的妙用
  3. 【转】Java关键字final、static使用总结
  4. SQL 向上取整、向下取整、四舍五入取整的实例!round、rounddown、roundup
  5. 如何循序渐进地学习Javascript
  6. powerdesigner jdbc 连接 oracle
  7. Android 定时任务高度【schedule】与【scheduleAtFixedRate】差别
  8. git bash中避免在push时反复输入用户名和密码
  9. deployd使用归纳
  10. 头皮发麻的HTML课时一
  11. JavaWeb三大组件之一Filter知识总结
  12. Spring MVC 中使用 Swagger2 构建动态 RESTful API
  13. ABP 教程文档 1-1 手把手引进门之 AngularJs, ASP.NET MVC, Web API 和 EntityFramework(官方教程翻译版 版本3.2.5)含学习资料
  14. TP手册学习第一天
  15. R︱shiny实现交互式界面布置与搭建(案例讲解+学习笔记)
  16. UVALive - 3530:Martian Mining
  17. Objective-C数据结构
  18. python之asyncio三种应用方法
  19. NPM install 中:-save 、 -save-dev 和 没有--save的情况
  20. xxx_initcall相关知识

热门文章

  1. jQuery 小知识点(插件)
  2. MySQL是否在扫描额外的记录
  3. Ubuntu 10.04启动进入命令行模式
  4. nginx_笔记分享_配置篇
  5. oracle创建主键序列和在ibatis中应用
  6. C#执行javascript代码
  7. Speed-BI报表按钮链接设置
  8. 转:exit()与_exit()的区别
  9. Linux系统编程(37)—— socket编程之原始套接字
  10. [LeetCode] 147. Insertion Sort List 解题思路