首页 > 其他分享 >Android开发 - Service 类处理后台持续操作解析

Android开发 - Service 类处理后台持续操作解析

时间:2024-08-24 11:14:58浏览次数:5  
标签:调用 Service Override MyService 后台 Android 解析 public

Service 是什么

  • Service 是一个重要的组件,它允许你在后台执行长时间运行的任务不会影响用户界面的响应与 Activity 和 Fragment 不同Service 不提供用户界面。它通常用于执行需要持续运行的操作,例如下载文件播放音乐执行后台计算

Service 的工作流程

  1. 启动 Service:当你启动一个 Service 时,它会在后台运行不会受到用户界面的干扰。你可以通过 startService() 方法来启动一个 Service

  2. 运行任务Service 会在后台执行任务直到你停止它。可以通过 stopService() 方法来停止一个 Service,或者Service 内部调用 stopSelf() 来停止自己

  3. 绑定 Service:可以将一个 Service 绑定到一个组件(如 Activity),这样就可以与 Service 进行交互。这通过 bindService() 方法实现

示例代码

  • 这个示例创建了一个 Service,它在后台每隔一段时间打印一条日志信息

    1. 创建一个 Service 类:创建一个继承自 Service 的类,并实现其关键方法.

      public class MyService extends Service {
      	// 当 Service 被创建时调用。通常用于初始化资源或执行一次性设置
          @Override
          public void onCreate() {
              super.onCreate();
              // Service 创建时调用
              Log.d("MyService", "Service created");
          }
      
          // 每次通过 startService() 启动 Service 时调用。在这里,你可以执行长时间运行的任务。返回值指定了 Service 被系统杀掉后的行为
          @Override
          public int onStartCommand(Intent intent, int flags, int startId) {
              // Service 启动时调用
              Log.d("MyService", "Service started");
      
              // 启动一个新线程执行任务
              new Thread(new Runnable() {
                  @Override
                  public void run() {
                      // 模拟长时间运行的任务
                      for (int i = 0; i < 5; i++) {
                          Log.d("MyService", "Running... " + i);
                          try {
                              Thread.sleep(1000); // 暂停1秒
                          } catch (InterruptedException e) {
                              e.printStackTrace();
                          }
                      }
                      // 任务完成后停止 Service
                      stopSelf();
                  }
              }).start();
      
              // 如果系统杀掉 Service,重新启动时使用 START_NOT_STICKY
              // START_NOT_STICKY 表示如果系统杀掉了 Service,它不会被自动重新启动
              return START_NOT_STICKY;
          }
      
          // 当 Service 被销毁时调用。用于清理资源或执行善后工作
          @Override
          public void onDestroy() {
              super.onDestroy();
              // Service 销毁时调用
              Log.d("MyService", "Service destroyed");
          }
      
          // 如果 Service 支持绑定(即提供与 Activity 的交互),它会返回一个 IBinder 对象。否则返回 null
          @Override
          public IBinder onBind(Intent intent) {
              // 不支持绑定,返回 null
              return null;
          }
      }
      
    2. AndroidManifest.xml 中声明 Service:要在应用中使用 Service,你需要AndroidManifest.xml 文件中声明它

      <application
          ... >
          <service android:name=".MyService" />
      </application>
      
    3. 启动和停止 Service

      // 启动 Service
      Intent serviceIntent = new Intent(this, MyService.class);
      startService(serviceIntent);
      
      // 停止 Service(可选)
      stopService(serviceIntent);
      

总结

  • ServiceAndroid 中用于执行后台操作的组件不会直接与用户界面交互。通过创建 Service 类并实现其方法,你可以在后台处理长时间运行的任务,而不会阻塞主线程

标签:调用,Service,Override,MyService,后台,Android,解析,public
From: https://www.cnblogs.com/ajunjava/p/18377549

相关文章

  • Android开发 - BroadcastReceiver 类处理系统或应用内部发送的广播消息解析
    什么是BroadcastReceiverBroadcastReceiver类是一个非常重要的组件,用于处理系统或应用内部发送的广播消息。广播消息可以是系统发出的(比如电池电量低、网络连接变化等)或者是应用内部发出的(比如某个任务完成了)。BroadcastReceiver可以在应用的后台或前台接收到这些消息,并作出......
  • 【2024最新】Android Debug Bridge【下载安装】零基础到大神【附下载链接】_android d
    一、ADB简介1、什么是adbADB全称为AndroidDebugBridge,起到调试桥的作用,是一个客户端-服务器端程序。其中客户端是用来操作的电脑,服务端是Android设备。ADB也是AndroidSDK中的一个工具,可以直接操作管理Android模拟器或者真实的Android设备。2、为什么要用......
  • Android开发 - UUID 类通用唯一标识符解析
    什么是UUIDUUID类是一个非常有用的工具,用来生成和处理通用唯一标识符(UUID)。UUID是一种标准的标识符,用于在计算机系统中唯一标识信息(UniversallyUniqueIdentifier)的缩写。它的目的是确保在不同的系统、不同的时间和地点生成的标识符是唯一的。UUID通常用于数据库记录、会话......
  • TreeMap&TreeSet解析
    TreeMapTreeSet使用适配器模式包装了TreeMap,所以只需要理解TreeMap就够了概述TreeMap实现了SortedMap接口,也就是说会按照顺序对Map中的元素进行排序,可以是自然顺序,也可以使用自定义比较器TreeMap<Integer,String>treeMap=newTreeMap<>();treeMap.put(3,"Apple");tree......
  • 【全面解析】大模型入门到精通指南:零基础起步,详尽教程一帖收藏!
    大模型的定义大模型是指具有数千万甚至数亿参数的深度学习模型。近年来,随着计算机技术和大数据的快速发展,深度学习在各个领域取得了显著的成果,如自然语言处理,图片生成,工业数字化等。为了提高模型的性能,研究者们不断尝试增加模型的参数数量,从而诞生了大模型这一概念。本文讨......
  • LinkedHashMap&LinkedHashSet源码解析
    LinkedHashMap概述LinkedHashSet使用适配器模式包装了LinkedHashSet一个有序的散列表,允许key为null也允许value为空,从名字上可以看出使用链表维护了有序性在元素存储时,在原来的HashMap的数组+链表的基础上,为每个元素添加了pre和next指针,构成了一个双向链表注意:内部没有使用红......
  • 【漫谈C语言和嵌入式027】探索信号处理的秘密:低通滤波器与高通滤波器的深度解析
            在嵌入式系统和数字信号处理领域,滤波器(Filter)是至关重要的工具。它们是用于处理和优化信号的基础组件,能够有效地控制信号的频率分布。滤波器的类型多种多样,其中最为基础且常用的便是低通滤波器(Low-PassFilter,LPF)和高通滤波器(High-PassFilter,HPF)。本文将......
  • Stable Diffusion 与 DALL·E3 的深度解析
    一、StableDiffusion的全方位解读 StableDiffusion是一款令人瞩目的AI绘画工具,其显著特点之一便是开源免费。这意味着用户无需支付费用即可自由使用和修改,为广大创作者提供了极大的便利。然而,要想充分发挥其功能,对电脑硬件有一定要求。显卡方面,建议使用NVIDIA系列,......
  • Android SDK is missing required platform api
    如果这个时候选择UpdateAndroidSDK以升级AndroidSDK的话,可能会弹出一个终端窗口,然后自动关闭后又重复弹该窗口,重复数次,最后还是不能成功升级AndroidSDK。线上搜的教程大部分都是叫下载AndroidStudio,可是笔者只想用Unity进行做开发。解决方法导致Unity无法升级A......
  • 深入解析HarmonyOS中的媒体查询及其高级用法
    在移动应用开发中,响应式设计是一个关键要素。HarmonyOS提供了一整套媒体查询功能,可以让开发者根据设备类型、屏幕尺寸、方向等条件动态调整应用的布局和样式。本文将深入探讨HarmonyOS中的媒体查询功能,展示其高级用法,帮助你构建更灵活的用户界面。媒体查询在HarmonyOS中的......