Service

<1>Service生命周期

onCreat():服务第一次被创建时调用

onStartCommand():服务启动时调用

onBind():服务被绑定时调用

onUnBind():服务被解绑时调用

onDestroy():服务停止时调用

<2>Service的两种启动方式?区别在哪?

第一种,其他组件调用Context的startService()方法可以启动一个Service,并回调服务中的onStartCommand()。如果该服务之前还没有创建,那么回调的顺序是:onCreate()-->onStartCommand()。服务启动了之后会一直保持运行状态,直到stopService() 或 stopSelf()方法被调用,服务停止并回调onDestroy()。另外,无论调用多少次startService()方法,只需调用一次stopService()或stopSelf()方法,服务就会停止了。

第二种,其他组件调用Context的bindService()可以绑定一个Service,并回调服务中的onBind()方法。类似地,如果该服务之前还没有创建,那么回调顺序是onCreate()-->onBind()。之后,调用方可以获取到onBind()方法里返回的IBinder对象实例,从而实现和服务进行通信。只要调用方和服务之间的连接没有断开,服务就会一直保持运行状态直到调用了unbindService()方法服务就会停止,回调顺序onUnBind()-->onDestroy()。

<3>一个Activty先start一个Service后,再bind时会回调什么方法?此时如何做才能回调Service的destory()方法?

startService()启动Service之后,再bindService()绑定,此时只会回调onBind()方法;若想回调Service的destroy()方法,需要同时调用stopService()和unbindService()方法才能让服务销毁掉。

<4>Service如何和Activity进行通信?

通过bindService()可以实现Activity调用Service中的方法;

通过广播实现Service向Activity发送消息;

<5>用过哪些系统Service?

WINDOW_SERVICE

LAYOUT_INFLATER_SERVICE

ACTIVITY_SERVICE

POWER_SERVICE

ALARM_SERVICE

NOTIFICATION_SERVICE

KEYGUARD_SERVICE

<6>是否能在Service进行耗时操作?如果非要可以怎么做?

Service默认并不会运行在子线程中,也不运行在一个独立的进程中,它同样执行在主线程中。所以不要在Service里执行耗时操作,除非手动打开一个子线程,否则有可能出现ANR的情况。

<7>AlarmManager能实现定时的原理?

通过调用AlarmManager的set()方法就可以设置一个定时任务,并提供三个参数(工作类型,定时任务触发的时间PendingIntent对象)。其中第三个PendingIntent对象是关键,一般会调用它的getBroadcast()方法来获取一个能够执行广播的PendingIntent。这样当定时任务呗触发的时候,广播接收器的onReceiver()方法就可以得到执行。即通过服务和广播的循环触发实现定时任务。

<8>前台服务是什么?和普通服务的不同?如何去开启一个前台服务?

和一般运行在后台的服务不同,前台服务的服务状态可以被用户一眼看到。它和普通服务最大的区别是,前者会一直有一个正在运行的图标在系统单状态栏显示,下拉状态栏可以看到更加详细的信息,非常类似于通知的效果,且当系统内存不足服务被杀死时,通知会被移除。实现一个前台服务也非常简单,和发送一个通知非常类似,只不过在构建一个Notification之后,不需要NotificationManager将通知显示出来,而是调用了startForeground()方法。

<9>是否了解ActivityManagerService,谈谈它发挥什么作用?

ActivityManagerService是Android中最核心的服务,主要负责系统中四大组件的启动、切换、调度及应用进程的管理和调度等工作,其职责与操作系统中的进程管理和调度模块类似。

<10>如何保证Service不被杀死?

在Service的onStartCommand()中设置flages值为START_STICKY,使得Service被杀死后尝试再次启动Service

提升Service优先级,比如设置为一个前台服务

在Activity的onDestroy()通过发送广播,并在广播接收器的onReceiver()中启动Service

<11>什么是IntentService?有何优点?

IntentService是Service的子类,比普通的Service增加了额外的功能。

先看Service本身存在两个问题:

1.Service不会专门启动一条单独的进程,Service与它所在应用位于同一个进程中;

2.Service也不是一条新线程,因此不应该在Service中直接处理耗时的任务;

IntentService优点:

1.会创建独立的工作线程来处理所有的intent请求;

2.会创建独立的工作线程来处理onHandleIntent()方法实现的代码,无需处理多线程问题;

3.所有请求处理完成后,IntentService会自动停止,无需调用stopSelf()方法停止Service;

4.为Service的onBind()提供默认实现,返回null;

5.为Service的onStartCommand()提供默认实现,将请求Intent添加到队列中;

IntentService使用:

让Service类继承IntentService,重写onStartCommand()和onHandleIntent()实现

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值