《第一行代码》第十章——服务!

第十章、服务


服务:是Android中实现程序后台运行的解决方案,适合执行那些不需要和用户交互而且还有长期运行的任务。服务的运行不依赖任何用户界面,即使程序被切换到后台,或者用户打开了另外一个应用程序,服务仍然能够保持正常运行。

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

  • 线程

    • 通过继承线程类

    定义线程:定义一个继承自Thread的类,重写run()方法,并在里面编写耗时逻辑。

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

    开启线程:new出MyThread的实例,调用它的start()方法

    new Mythread().start()
    • 使用继承的耦合性有点高,更多的时候我们选择实现Runnable接口的方式来定义一个线程
    class MyThread implements Runnable {
        @override
        public void run() {
          //处理具体逻辑
        }
    }
    //启动方法也相应改变
    MyThread myThread = new MyThread();
    new Thread(myThread).start();

    Thread的构造函数接收一个Runnable参数,而我们new出的MyThread是实现了Runnable接口的对象。

    • 使用匿名类(更常用)
    new Thread(new Runnable) {
      @override
      public void run() {
        //处理具体逻辑
      }
    }

主线程

当一个程序启动时,就有一个进程被操作系统(OS)创建,与此同时一个线程也立刻运行,该线程通常叫做程序的主线程(Main Thread),因为它是程序开始时就执行的,如果你需要再创建线程,那么创建的线程就是这个主线程的子线程。每个进程至少都有一个主线程,在Winform中,应该就是创建GUI的线程。

Android中不允许在子线程中进行UI操作。


  • 异步消息处理(解决上述问题)

    • Android中的异步消息处理主要有4个部分组成:Message、Handler、MessageQueue和Looper。

      1. Message

      Message是在线程之间传递的消息。可在内部携带少量信息,用于在不同线程之间交换数据。使用Message的what字段携带自定义消息,使用arg1和arg2字段携带整型数据,使用obj字段携带一个Object对象。

      1. Handler

      用于发送和处理消息。发送消息一般使用Handler的sendMessage()方法,发出的消息经过处理后最终会传递到Handler的handleMessage()方法中。

      1. MessageQueue

      消息队列,主要用于存放所有通过Handler发送的消息。这部分消息一直存在于消息队列中,等待被处理。每个线程中只会有一个MessageQueue对象。

      1. Looper

      Looper是每个线程 中的MessageQueue的管家,调用Looper的loop()方法后,就会进入一个无限循环中,然后每当发现MessageQueue中存在一条消息,就会将它取出,并传递到Handler的handleMessage()方法中。每个线程中也只会有一个Looper对象。

  • 使用AsyncTask (Async:异步)

    AsyncTask是一个抽象类,所以要想使用需要创建一个类去继承它。在继承时可以为AsyncTask类指定3个泛型参数。

    • Params:在执行AsyncTask时需要传入的参数,可用于在后台任务中使用。
    • Progress:后台任务执行时,如果需要在界面上显示当前的进度,则使用这里制定的泛型作为进度单位。
    • Result:任务执行完毕后,若需返回结果,则使用这里指定的泛型作为返回值类型。

    例:class DownloadTask extends AsyncTask

发布了27 篇原创文章 · 获赞 15 · 访问量 2万+

猜你喜欢

转载自blog.csdn.net/weixin_42306122/article/details/82563971