Android面试题之Service

Android面试题之Service1.service是否在mainthread中执行,service里面是否能执行耗时的操作?默认情况,如果没有service所运行的进程,Service和Activity是运行在当前app所在进程中的mainthread里面service里面不能执行耗时的操作(网络请求,拷贝数据库,大文件)特殊情况,可以在清单文件中配置service所在的进程,让service在另外的进程中执行。

大家好,又见面了,我是你们的朋友全栈君。

1.service是否在main thread中执行,service里面是否能执行耗时的操作?
默认情况,如果没有service所运行的进程,Service和Activity是运行在当前app所在进程中的main thread里面
service里面不能执行耗时的操作(网络请求,拷贝数据库,大文件)
特殊情况,可以在清单文件中配置service所在的进程,让service在另外的进程中执行。
<service
android:name=””
        android:enabled=”true”
android:process=”:remote”
</service>
在Service中执行的耗时操作最多20秒,BroadcastReceiver是10秒,Activity是5秒。
2.Activity怎么和Service绑定,怎么在Activity中启动自己对应的Service?
Activity通过bindService(Intent service,ServiceConnection conn,int flags)跟Service进行绑定,当绑定成
功的时候ServiceService会将代理对象通过会调的方式传给conn,这样我们就拿到了Service提供的服务代理对象。
在Activity中可以通过startService和bindService方法启动Service。一般情况下如果想获取Service的服务对象
那么肯定需要bindService()方法,比如音乐播放器,第三方支付等。如果仅仅只是为了开启一个后台任务那么可
以使用startService()方法。
插曲:一、IntentService简介
IntentService是Service的子类,比普通的Service增加了额外的功能。先看Service本身存在的两个问题:
(1)Service不会专门启动一条单独的进程,Service与它所在应用位于同一个进程中。
(2)Service也不是专门一条新的进程,因此不应该在Service中直接处理耗时的任务
二、IntentService特征
会创建独立的worker线程来处理所有的Intent请求
会创建独立的worker线程来处理OnHandlerIntent()方法实现的代码,无需处理多线程的问题
所有请求处理完成后,IntentService会自动停止,无需调用stopSelf()方法停止Service;
为Service的onBind()提供默认实现,返回null
为Service的onStartCommand提供默认实现,将请求Intent添加到队列中
3.什么是Service以及描述下他的生命周期。Service有哪些启动方法,有什么区别,怎样停用Service?
在Service的生命周期中,被回调的方法比Activity少一些只有onCreate(),onStart(),onDestroy(),onBind(),onUnbind()
通常有两种方式启动一个Service,它们对生命周期的影响是不太一样的。
(1)通过startService
Service会经历onCreate(),onStart(),然后处于运行状态,stopService()时候调用onDestroy方法
如果是调用者自己直接退出而没有调用stopService的haunted,Service会一直在后台运行
(2)通过bindService
Service会运行onCreate,然后调用onBind(),这时候调用者和Service绑定在一起。调用者退出了,Service就会调
用onUnbind->onDestroy方法
需要注意的是如果几个方法交织在一起
*一个原则是onCreate的方法只会被调用一次,就是你无论多少次的startService有bindService,Service只被创
建一次。
*如果先是bind了,那么start的时候就直接运行Service中onStart方法,如果先是start那么bind的时候就直接运
行onBind方法。
*如果service运行期间调用了bindService,这时候再调用stopService的话,service是不会调用onDestroy方法
的,service就stop不掉了,只能调用UnBindService,Service就会被销毁
*如果一个Service通过startService被start之后,多次调用startService的话,Service会多次调用onstart方法。

多次调用stopService的话,Service只会调用一次onDestroy方法。

*如果一个Service通过bindService被start之后,多次调用bindService的话,Service只会调用一次onBind方法

多次调用unBindService的话会抛异常。

插:Serializable和Parcelable的区别

在使用内存的时候,Parcelable类比Serialable性能高,所以推荐使用Parcelable类

1.Serializable在序列化的时候会产生大量的临时变量,从而引起频繁的GC
2.Parcelable不能使用在要将数据存储在磁盘上的情况。尽管Serializable效率低点,但在这种情况下,还是建
议使用Serializable。
3.Parcelable的实现,需要在类中添加一个静态成员变量,这个变量需要继承Parcelable.Creator接口。

版权声明:本文内容由互联网用户自发贡献,该文观点仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 举报,一经查实,本站将立刻删除。

发布者:全栈程序员-站长,转载请注明出处:https://javaforall.net/143448.html原文链接:https://javaforall.net

赞 (0)
全栈程序员-站长的头像全栈程序员-站长


相关推荐

  • goland激活码 2021_通用破解码

    goland激活码 2021_通用破解码,https://javaforall.net/100143.html。详细ieda激活码不妨到全栈程序员必看教程网一起来了解一下吧!

    2022年3月16日
  • Java集合类的使用

    Java集合类的使用Java集合类Collection,它是一个接口,他有两个子接口List和Map,Collection主要方法booleanadd(Ee);booleanaddAll(Collection<?extendsE>c);booleanremove(Objecto);booleanremoveAll(Collection<?>c);voidclear();intsize();booleanisEmpty();booleancon

    2022年5月23日
  • MSDP配置(anycast RP)

    MSDP配置(anycast RP)实验拓扑:案例配置需求:1、 设备之间互联的IP如图所示;2、 R1和R2设备互联使用12.1.1.X/24,X表示设备编号,如R1使用12.1.1.1/24,R2使用12.1.1.2/24,其它设备互联同上;3、 AS100内IGP协议运行OSPF协议,AS200内IGP协议运行EIGRP协议;4、 R3和R4配置运行BGP协议,建立EBGP邻居关系;5、 配置组播稀疏模式,其中…

    2022年5月18日
  • TM影像波段介绍「建议收藏」

    TM影像波段介绍「建议收藏」一、各波段特征:1.TM10.45-0.52um,蓝波段,对水体穿透强,对叶绿素与叶色素反映敏感,有助于判别水深及水中叶绿素分布以及水中是否有水华等.2.TM20.52-0.60um,绿波段,对健康茂盛植物的反射敏感,对力的穿透力强,用于探测健康植物绿色反射率,按绿峰反射评价植物的生活状况,区分林型,树种和反映水下特征.3.TM30.62-0.69UM,红波段,叶绿

    2022年7月23日
  • 序列化和反序列化的底层实现原理是什么?

    序列化和反序列化的底层实现原理是什么?序列化和反序列化作为Java里一个较为基础的知识点,大家心里也有那么几句要说的,但我相信很多小伙伴掌握的也就是那么几句而已,如果再深究问一下Java如何实现序列化和反序列化的,就可能不知所措了!遥记当年也被问了这一个问题,自信满满的说了一大堆,什么是序列化、什么是反序列化、什么场景的时候才会用到等,然后面试官说:那你能说一下序列化和反序列化底层是如何实现的吗?一脸懵逼,然后回家等通知!一、…

    2022年6月15日

发表回复

您的邮箱地址不会被公开。 必填项已用 * 标注

关注全栈程序员社区公众号