android services

Service 介绍

代码参考https://github.com/Jkoala/koala_android/tree/main/service_demo

Service不同于后台线程它是跟Activity一个层级的

Service 使用

创建

  1. 创建一个自定义Service 继承Service
  2. 重写onCreate onBind onStartCommand
  3. 在Mainfest.xml 注册我们的Service

启动Service

java 复制代码
Intent intent = new Intent(this, MyService.class);
startService(intent);

前台服务

在Android中,前台服务(Foreground Service)是一种特殊类型的服务,它在用户界面上显示一个通知,并且保持唤醒状态,直到服务被停止。通常,前台服务用于执行一些与应用程序的主要任务相关的重要任务,例如下载文件、播放音乐、上传数据等。

要创建一个前台服务,你需要执行以下步骤:

创建一个服务类,并继承Service类。

在AndroidManifest.xml文件中,将服务声明为前台服务,并在标签中添加foregroundServiceType属性。

在服务中,调用startForeground()方法,并传递一个通知对象和通知的样式。

在服务中,处理与主要任务相关的逻辑。

停止服务时,调用stopForeground()方法来移除通知。

java 复制代码
public class MyForegroundService extends Service {  
    private NotificationManager mNotificationManager;  
    private int mNotificationId = 1;  
    private String mTag = "MyForegroundService";  
  
    @Override  
    public IBinder onBind(Intent intent) {  
        return null; // No binding provided  
    }  
  
    @Override  
    public void onCreate() {  
        super.onCreate();  
        mNotificationManager = (NotificationManager) getSystemService(Context.NOTIFICATION_SERVICE);  
        startForeground(mNotificationId, createNotification());  
    }  
  
    @Override  
    public int onStartCommand(Intent intent, int flags, int startId) {  
        // Perform your main task here  
        // ...  
        return START_STICKY; // Service is restarted if it gets terminated  
    }  
  
    @Override  
    public void onDestroy() {  
        super.onDestroy();  
        stopForeground(true); // Removes the notification  
    }  
  
    private Notification createNotification() {  
        NotificationCompat.Builder builder = new NotificationCompat.Builder(this, CHANNEL_ID)  
                .setSmallIcon(R.drawable.ic_notification)  
                .setContentTitle("My Foreground Service")  
                .setContentText("This is a foreground service notification.")  
                .setPriority(NotificationCompat.PRIORITY_DEFAULT); // Optional, but recommended for foreground services  
        return builder.build();  
    }  
}

Service 与Activity 通信

通过onBind 方法 activity绑定服务获得服务的binder来实现与之通信

不懂就问

为什么还需要Service?

我们都知道在主线程可以用Thread开启一个线程去执行一些耗时的操作,这样不会阻塞UI,但是如果当前的Activity销毁了,就没有办法获取Thread的实例,也就不能再去操作那个Thread。这样Thread的生命周期和Activity就绑定在一起了。Service不一样,只要启动了没有销毁,就一直存在后台中,多个Activity能和一个Service进行关联调用。

相关推荐
Java猿_6 小时前
Spring Boot 集成 Sa-Token 实现登录认证与 RBAC 权限控制(实战)
android·spring boot·后端
Jerry9 小时前
Jetpack Compose Navigation
android
介一安全9 小时前
【Frida Android】实战篇17:Frida检测与绕过——基于inline hook的攻防实战
android·网络安全·逆向·安全性测试·frida
龙之叶11 小时前
Android如何通过adb命令push文件后在媒体库中显示
android·adb
Just_Paranoid11 小时前
【Settings】Android 设备信息相关参数的获取
android·5g·wifi·ip·sn·network
StarShip12 小时前
SystemServer类 与 system_server进程
android
画个太阳作晴天12 小时前
Android App 跟随系统自动切换白天/黑夜模式:车机项目实战经验分享
android·android studo
成都大菠萝13 小时前
2-2-2 快速掌握Kotlin-语言的接口默认实现
android
代码s贝多芬的音符13 小时前
android webview 打开相机 相册 图片上传。
android·webview·webview打开相机相册
游戏开发爱好者813 小时前
抓包工具有哪些?代理抓包、数据流抓包、拦截转发工具
android·ios·小程序·https·uni-app·iphone·webview