《第一行代码》学习笔记34-服务Service(1)

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();
原文地址:https://www.cnblogs.com/Iamasoldier6/p/5046885.html