zoukankan      html  css  js  c++  java
  • 《第一行代码》学习笔记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();
    
  • 相关阅读:
    Java程序员必知的8大排序
    java提高篇-----理解java的三大特性之封装
    树莓派学习笔记——GPIO功能学习
    SQL 服务没有及时响应启动或控制请求”的解决方法
    http://blog.csdn.net/u011001723/article/details/45621027
    error
    Spring @Conditional注解的使用
    Python [SSL: CERTIFICATE_VERIFY_FAILED] certificate verify failed 解决方法
    python
    local class incompatible: stream classdesc serialVersionUID = -2897844985684768944, local class serialVersionUID = 7350468743759137184
  • 原文地址:https://www.cnblogs.com/Iamasoldier6/p/5046885.html
Copyright © 2011-2022 走看看