前往小程序,Get更优阅读体验!
立即前往
首页
学习
活动
专区
工具
TVP
发布
社区首页 >专栏 >Android面试题之Service

Android面试题之Service

作者头像
全栈程序员站长
发布2022-09-03 11:19:40
4160
发布2022-09-03 11:19:40
举报

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

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接口。

更多面试题Android面试题之Activity

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

本文参与 腾讯云自媒体分享计划,分享自作者个人站点/博客。
原始发表:2022年5月2,如有侵权请联系 cloudcommunity@tencent.com 删除

本文分享自 作者个人站点/博客 前往查看

如有侵权,请联系 cloudcommunity@tencent.com 删除。

本文参与 腾讯云自媒体分享计划  ,欢迎热爱写作的你一起参与!

评论
登录后参与评论
0 条评论
热度
最新
推荐阅读
目录
  • 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接口。
相关产品与服务
数据保险箱
数据保险箱(Cloud Data Coffer Service,CDCS)为您提供更高安全系数的企业核心数据存储服务。您可以通过自定义过期天数的方法删除数据,避免误删带来的损害,还可以将数据跨地域存储,防止一些不可抗因素导致的数据丢失。数据保险箱支持通过控制台、API 等多样化方式快速简单接入,实现海量数据的存储管理。您可以使用数据保险箱对文件数据进行上传、下载,最终实现数据的安全存储和提取。
领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档