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)
全栈程序员-站长的头像全栈程序员-站长


相关推荐

  • 怪问题

    怪问题

    2021年7月27日
    125
  • Ubuntu16.04 Caffe 安装步骤记录(超详尽)

    历时一周终于在ubuntu16.04系统成功安装caffe并编译,网上有很多教程,但是某些步骤并没有讲解详尽,导致配置过程总是出现各种各样匪夷所思的问题,尤其对于新手而言更是欲哭无泪,在我饱受折磨后决定把安装步骤记录下来,尽量详尽清楚明白,避免后来小白重蹈覆辙。安装硬件:inteli5+NVIDIA740M安装流程细分为如下10个步骤,细化步骤粒度更易避免出错

    2022年4月17日
    58
  • sublime3激活码(注册激活)

    (sublime3激活码)本文适用于JetBrains家族所有ide,包括IntelliJidea,phpstorm,webstorm,pycharm,datagrip等。https://javaforall.net/100143.htmlIntelliJ2021最新激活注册码,破解教程可免费永久激活,亲测有效,上面是详细链接哦~V…

    2022年3月22日
    41
  • vim下一页

    vim下一页整页翻页ctrl-fctrl-bf就是forwordb就是backward翻半页ctrl-dctlr-ud=downu=up滚一行ctrl-ectrl-yzz让光标所在的行居屏幕中央zt让光标所在的行居屏幕最上一行t=topzb让光标所在的行居屏幕最下一行b=bottomctrl+f(forward)往前翻一页ctrl+b(backward)往后翻一页ctrl+d(down)往前翻半页ctrl+u(up)往后翻半页zz让光标所在行.

    2022年5月5日
    53
  • settimeout()停止_需求方案

    settimeout()停止_需求方案转载https://aotu.io/notes/2017/09/25/manage-setTimeout-an-setInterval/在管理setTimeout&amp;setInterval这两个APIs时,笔者通常会在顶级(全局)作用域创建一个叫 timer 的对象,在它下面有两个数组成员——{sto,siv},用它们来分别存储需要管理的setTimeoutID/…

    2022年10月3日
    5
  • Python3取余不等于0(巨坑)[通俗易懂]

    Python3取余不等于0(巨坑)[通俗易懂]这里写自定义目录标题欢迎使用Markdown编辑器新的改变功能快捷键合理的创建标题,有助于目录的生成如何改变文本的样式插入链接与图片如何插入一段漂亮的代码片生成一个适合你的列表创建一个表格设定内容居中、居左、居右SmartyPants创建一个自定义列表如何创建一个注脚注释也是必不可少的KaTeX数学公式新的甘特图功能,丰富你的文章UML图表FLowchart流程图导出与导入导出导入欢迎使用Markdown编辑器你好!这是你第一次使用Markdown编辑器所展示的欢迎页。如果你想学习如何使用Mar

    2022年4月25日
    91

发表回复

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

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