Android四大组件-Service

2021-08-13  本文已影响0人  雷根儿

今天复习Android四大组件ActivityServiceBroadcastReceiverContentProvide

二、Service

1.什么是Service
服务是一个后台运行的组件,执行连续运行且不需要用户交互的任务。甚至应用被销毁也依然可以工作。Service 是四大组件之一,必现在AndroidMainfest.xml中注册
2.Service的生命周期

Service的生命周期.png

onCreate():如果service没被创建过,调用startService()后会执行onCreate()回调;如果service已处于运行中,调用startService()不会执行onCreate()方法。也就是说,onCreate()只会在第一次创建service时候调用,多次执行startService()不会重复调用onCreate(),此方法适合完成一些初始化工作;
onStartComand():服务启动时调用,此方法适合完成一些数据加载工作,比如会在此处创建一个线程用于下载数据或播放音乐;
onBind():服务被绑定时调用;
onUnBind():服务被解绑时调用;
onDestroy():服务停止时调用;

3.Service生命周期方法

方法 作用
startService(Intent) 启动服务
stopService(Intent) 关闭服务
bindService(Intent,ServiceConnection,flag) 绑定服务
unbindService(ServiceConnection) 解绑服务

4.生命周期调用

5.服务的优先级
服务默认启动方式是后台服务,但是可以通过设置服务为前台服务,提高服务的优先级,进而避免手机内存紧张时,服务进程被杀掉。

//设置为前台服务
startForeground(int, Notification);
//取消为前台服务
stopForeground(true);
    ......
    ......
    @Override
    public int onStartCommand(Intent intent, int flags, int startId) {

        if (intent.getAction().equals("start_forceground_service")) {

//        获取NotificationManager实例
            NotificationManager notifyManager = (NotificationManager) getSystemService(NOTIFICATION_SERVICE);
//        实例化NotificationCompat.Builder并设置相关属性
            NotificationCompat.Builder builder = new NotificationCompat.Builder(this)
//                设置小图标
                    .setSmallIcon(R.mipmap.ic_launcher)
                    .setLargeIcon(BitmapFactory.decodeResource(getResources(), R.mipmap.ic_launcher))
//                设置通知标题
                    .setContentTitle("我是通过startForeground 启动前台服务通知")
//                设置通知不能自动取消
                    .setAutoCancel(false)
                    .setOngoing(true)
//                设置通知时间,默认为系统发出通知的时间,通常不用设置
//                .setWhen(System.currentTimeMillis())
//               设置通知内容
                    .setContentText("请使用stopForeground 方法改为后台服务");

            //通过builder.build()方法生成Notification对象,并发送通知,id=1
//        设置为前台服务
            startForeground(1, builder.build());

        } else if (intent.getAction().equals("stop_forceground_service")) {
            
            stopForeground(true);
        }

        return super.onStartCommand(intent, flags, startId);
    }
    ......
    ......

6.如何保证Service不被杀死
从三个层面入手:

A:提供进程优先级,降低进程被杀死的概率

B:在进程被杀死后,进行拉活。

C. 依靠第三方根据终端不同。

三、BroadcastReceiver

上一篇 下一篇

猜你喜欢

热点阅读