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();
    
  • 相关阅读:
    去掉[]中的英文字符
    Python面向对象OOP
    Python内置模块
    Python面向对象
    Python文件操作
    Python元组数据类型详解
    Jenkins+postman发送邮件测试报告及附件
    Python列表数据类型详解
    Python面向对象高阶描述符与设计魔术方法
    Python字典数据类型详解
  • 原文地址:https://www.cnblogs.com/Iamasoldier6/p/5046885.html
Copyright © 2011-2022 走看看