13. 14 .什么是Service以及描述下它的生命周期。Service有哪些启动方法,有什么区别,怎样停用Service?

在Service的生命周期中,被回调的方法比Activity少一些,只有onCreate, onStart, onDestroy, onBind和onUnbind。 通常有两种方式启动一个Service,他们对Service生命周期的影响是不一样的。

在Service的生命周期中,被回调的方法比Activity少一些,只有onCreate, onStart, onDestroy, onBind和onUnbind。 通常有两种方式启动一个Service,他们对Service生命周期的影响是不一样的。 1 通过startService Service会经历 onCreate 到onStart,然后处于运行状态,stopService的时候调用onDestroy方法。 如果是调用者自己直接退出而没有调用stopService的话,Service会一直在后台运行。 2 通过bindService Service会运行onCreate,然后是调用onBind, 这个时候调用者和Service绑定在一起。调用者退出了,Srevice就会调用onUnbind->onDestroyed方法。 所谓绑定在一起就共存亡了。调用者也可以通过调用unbindService方法来停止服务,这时候Srevice就会调用onUnbind->onDestroyed方法。 需要注意的是如果这几个方法交织在一起的话,会出现什么情况呢? 一个原则是Service的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只会调用一次onDestroyed方法。 如果一个service通过bindService被start之后,多次调用bindService的话,service只会调用一次onBind方法。 多次调用unbindService的话会抛出异常。 15. 不用service,B页面为音乐播放,从A跳转到B,再返回,如何使音乐继续播放? 这个问题问的很山寨.默认不做任何处理,B里面的音乐都能播放. 遇到问题, 可以随机应变,灵活发挥,多考虑些细节,比如说这个题就可以这样说,说说你对startActivityForResult的理解() A开启B的时候,用startActivityForResult()方法, B返回的时候销毁了并且把播放的状态信息返回给A ,A继续播放音乐. 16. 什么是IntentService?有何优点? 普通的service ,默认运行在ui main 主线程 Sdk给我们提供的方便的,带有异步处理的service类IntentService,里面的 OnHandleIntent()方法可以处理耗时的操作,OnHandleIntent()方法运行在子线城中。 17.什么时候使用Service?Service是长期运行的,比如QQ就会有一个长期运行的Service来接受服务器的消息。他要一直运行让应用去调用或者保持保持与服务端的连接。Aidl也要经常用到Service,因为他要长期让第三方去调用。用Service经常要去绑定才能与他通信。 startForeground(id, notification) Messager.activity与service之间也可以通过消息进行交互。消息可以跨进程,不用使用aidl了。 拥有service的进程具有较高的优先级 官方文档告诉我们,Android系统会尽量保持拥有service的进程运行,只要在该service已经被启动(start)或者客户端连接(bindService)到它。当内存不足时,需要保持,拥有service的进程具有较高的优先级。 1. 如果service正在调用onCreate, onStartCommand或者onDestory方法,那么用于当前service的进程相当于前台进程以避免被killed。 2. 如果当前service已经被启动(start),拥有它的进程则比那些用户可见的进程优先级低一些,但是比那些不可见的进程更重要,这就意味着service一般不会被killed. 3. 如果客户端已经连接到service (bindService),那么拥有Service的进程则拥有最高的优先级,可以认为service是可见的。 4. 如果service可以使用startForeground(int, Notification)方法来将service设置为前台状态,那么系统就认为是对用户可见的,并不会在内存不足时killed。(流氓软件可以起2个service,当一个service被杀死了另一个service可以把这个service启动,这样这个service就永远不会杀死。) 如果有其他的应用组件作为Service,Activity等运行在相同的进程中,那么将会增加该进程的重要性。 1.Service的特点可以让他在后台一直运行,可以在service里面创建线程去完成耗时的操作. 2.Broadcast receiver捕获到一个事件之后,可以起一个service来完成一个耗时的操作. 3.远程的service如果被启动起来,可以被多次bind, 但不会重新create. 索爱手机X10i的人脸识别的service可以被图库使用,可以被摄像机,照相机等程序使用. 18. 请描述一下Intent 和 Intent Filter。 Android 中通过 Intent 对象来表示一条消息,一个 Intent 对象不仅包含有这个消息的目的地,还可以包含消息的内容,这好比一封 Email,其中不仅应该包含收件地址,还可以包含具体的内容。对于一个 Intent 对象,消息“目的地”是必须的,而内容则是可选项。 通过Intent 可以实现各种系统组件的调用与激活. Intent filter: 可以理解为邮局或者是一个信笺的分拣系统… 这个分拣系统通过3个参数来识别 Action: 动作 view Data: 数据uri uri Category : 而外的附加信息 Action 匹配 Action 是一个用户定义的字符串,用于描述一个 Android 应用程序组件,一个 Intent Filter 可以包含多个 Action。在 AndroidManifest.xml 的 Activity 定义时可以在其 <intent-filter >节点指定一个 Action 列表用于标示 Activity 所能接受的“动作”,例如: <intent-filter > <action android:name="android.intent.action.MAIN" /> <action android:name="cn.itcast.action" /> …… </intent-filter> 如果我们在启动一个 Activity 时使用这样的 Intent 对象: Intent intent =new Intent(); intent.setAction("cn.itcast.action"); 那么所有的 Action 列表中包含了“cn.itcast”的 Activity 都将会匹配成功。 Android 预定义了一系列的 Action 分别表示特定的系统动作。这些 Action 通过常量的方式定义在 android.content. Intent中,以“ACTION_”开头。我们可以在 Android 提供的文档中找到它们的详细说明。 URI 数据匹配 一个 Intent 可以通过 URI 携带外部数据给目标组件。在 <intent-filter >节点中,通过 <data/>节点匹配外部数据。 mimeType 属性指定携带外部数据的数据类型,scheme 指定协议,host、port、path 指定数据的位置、端口、和路径。如下: <data android:mimeType="mimeType" android:scheme="scheme" android:host="host" android:port="port" android:path="path"/> 电话的uri tel: 12345 http://www.baidu.com 自己定义的uri itcast://cn.itcast/person/10 如果在 Intent Filter 中指定了这些属性,那么只有所有的属性都匹配成功时 URI 数据匹配才会成功。 Category 类别匹配 <intent-filter >节点中可以为组件定义一个 Category 类别列表,当 Intent 中包含这个列表的所有项目时 Category 类别匹配才会成功。 默认是DEFAULT 19. Intent传递数据时,可以传递哪些类型数据? 1.一般的基本数据类型 Intent .putextra() intent.getextra(); 2.数据的uri, intent.setData() intent.getData(); 20. 说说Activity,Intent,Service是什么关系 。 麦当劳和麦当娜的关系是什么关系? 这种问题,就讲下activity,讲一下service,说一下 通过intent去激活组件,传递数据. 说自己项目中有这样一个网络更新的功能,显示界面就用的activity, 后台有个service每隔半小时都去访问下服务器获取更新的数据… 开启服务用的是intent来开启 21. 请描述一下Broadcast Receiver。 有很多广播接收者 ,系统已经实现了很多广播(开机广播,打电话广播,收短信广播)也可以自定义广播. 广播分两种 有序广播 无序广播,大家一起收到。 指定接收者的广播 . 是不可以被拦截掉的 <intent-filter android:priority="1000"> <action android:name="android.provider.Telephony.SMS_RECEIVED"/> </intent-filter> abortBroadcast(); 用于接收系统的广播通知, 系统会有很多sd卡挂载,手机重启,广播通知,低电量,来电,来短信等…. 手机卫士中自定义一个broadcast receiver <intent-filter android:> <action> sms_received </action> </intent-filter> 来获取短信到来的广播, 根据黑名单来判断是否拦截该短信. 画画板生成图片后,当从网上下载一个图片后要显示在默认的图库中的时候要发送一个sd挂载的通知,通知系统的gallery去获取到新的图片. Intent intent = new Intent(Intent.ACTION_MEDIA_MOUNTED,Uri.parse("file://"+Environment.getExternalStorageDirectory())); sendBroadcast(intent); 22. 在manifest和代码中如何注册和使 用 broadcast receiver 。 设置广播接收者的优先级,设置广播接受者的action名字 等… 详细见工程代码. <intent-filter android:priority="1000"> <action android:name="android.intent.action.NEW_OUTGOING_CALL"/> </intent-filter> </receiver> <receiver android:name=".SmsReceiver"> <intent-filter android:priority="1000"> <action android:name="android.provider.Telephony.SMS_RECEIVED"/> </intent-filter> </receiver> <receiver android:name=".BootCompleteReceiver"> <intent-filter > <action android:name="android.intent.action.BOOT_COMPLETED" /> </intent-filter> </receiver> 23. 请介绍下ContentProvider是如何实现数据共享的。 把自己的数据通过uri的形式共享出去,所以不会看到数据库表的字段结构,就会保证数据表的隐私性。 android 系统下 不同程序 数据默认是不能共享访问 需要去实现一个类去继承ContentProvider public class PersonContentProvider extends ContentProvider{ public boolean onCreate(){ //.. } query(Uri, String[], String, String[], String) insert(Uri, ContentValues) update(Uri, ContentValues, String, String[]) delete(Uri, String, String[]) } 24. 请介绍下Android的数据存储方式。 文件: 访问权限. sdcard <data>/<data> 数据库:也是文件,.db文件, sqlite SharedPreference: <data>/<data>/shared_preps 网络: socket tcp udp , http httpurlconnection 25. 为什么要用ContentProvider?它和sql的实现上有什么差别? 屏蔽数据存储的细节,对用户透明,用户只需要关心操作数据的uri就可以了 不同app之间共享,操作数据 Sql也有增删改查的方法. 但是contentprovider 还可以去增删改查本地文件. xml文件的读取,更改, 网络数据读取更改 26. 请介绍下Android中常用的五种布局。 FrameLayout(帧布局,做游戏做视频,一层层的盖住。底下是视频上面盖上一些快进暂停按钮),LinearLayout (线性布局,控件的层级比较多,绘制的时候耗时),AbsoluteLayout(绝对布局,不用做屏幕适配的时候,),RelativeLayout(相对布局,上下左右,控件之间的层级比较少,绘制的时间短),TableLayout(表格布局) FrameLayout 从屏幕的左上角开始布局,叠加显示, 实际应用 播放器的暂停按钮. LinearLayout 线性布局,这个东西,从外框上可以理解为一个div,他首先是一个一个从上往下罗列在屏幕上。每一个LinearLayout里面又可分为垂直布局 (android:orientation="vertical")和水平布局(android:orientation="horizontal" )。当垂直布局时,每一行就只有一个元素,多个元素依次垂直往下;水平布局时,只有一行,每一个元素依次向右排列。 AbsoluteLayout 绝对布局犹如div指定了absolute属性,用X,Y坐标来指定元素的位置android:layout_x="20px" android:layout_y="12px" qq斗地主 qq游戏大厅 800*480 800*480.apk fwvga 854*480 指定平板机型的游戏开发中经常用到绝对布局 widget 绝对布局 指定机型的平板游戏开发机顶盒开发。. 2.3 3.0 1.界面布局 任务管理器 gridview 2.手机 任务管理 listview lephone lepad RelativeLayout 相对布局可以理解为某一个元素为参照物,来定位的布局方式。主要属性有: 相对于某一个元素 android:layout_below="@id/aaa" 该元素在 id为aaa的下面 android:layout_toLeftOf="@id/bbb" 改元素的左边是bbb 相对于父元素的地方 android:layout_alignParentLeft="true" 在父元素左对齐 android:layout_alignParentRight="true" 在父元素右对齐 TableLayout <table> 表格布局类似Html里面的Table。每一个TableLayout里面有表格行TableRow,TableRow里面可以具体定义每一个元素,设定他的对齐方式 android:gravity="" 。 每一个布局都有自己适合的方式,另外,这五个布局元素可以相互嵌套应用,做出美观的界面。 oa 自动化 生成报表 ,图标 表示 css div webview 27. 通过eclips的File Exlporer可以看见在data/system/packages.xml这个xml就是安卓应用的注册表,action和service都在里面,每次启动action的时候都会去这个里面找。

本文转自农夫山泉别墅博客园博客,原文链接:http://www.cnblogs.com/yaowen/p/5164978.html,如需转载请自行联系原作者

android151 笔记相关推荐

  1. 【读书笔记】知易行难,多实践

    前言: 其实,我不喜欢看书,只是喜欢找答案,想通过专业的解答来解决我生活的困惑.所以,我听了很多书,也看了很多书,但看完书,没有很多的实践,导致我并不很深入在很多时候. 分享读书笔记: <高效1 ...

  2. 【运维学习笔记】生命不息,搞事开始。。。

    001生命不息,搞事不止!!! 这段时间和hexesdesu搞了很多事情! 之前是机械硬盘和固态硬盘的测速,我就在那默默的看着他一个硬盘一个机械测来测去. 坐在他后面,每天都能看到这位萌萌的小男孩,各 ...

  3. SSAN 关系抽取 论文笔记

    20210621 https://zhuanlan.zhihu.com/p/353183322 [KG笔记]八.文档级(Document Level)关系抽取任务 共指id嵌入一样 但是实体嵌入的时候 ...

  4. pandas以前笔记

    # -*- coding: utf-8 -*- """ Created on Sat Jul 21 20:06:20 2018@author: heimi "& ...

  5. PyTorch 学习笔记(六):PyTorch hook 和关于 PyTorch backward 过程的理解 call

    您的位置 首页 PyTorch 学习笔记系列 PyTorch 学习笔记(六):PyTorch hook 和关于 PyTorch backward 过程的理解 发布: 2017年8月4日 7,195阅读 ...

  6. 容器云原生DevOps学习笔记——第三期:从零搭建CI/CD系统标准化交付流程

    暑期实习期间,所在的技术中台-效能研发团队规划设计并结合公司开源协同实现符合DevOps理念的研发工具平台,实现研发过程自动化.标准化: 实习期间对DevOps的理解一直懵懵懂懂,最近观看了阿里专家带 ...

  7. 容器云原生DevOps学习笔记——第二期:如何快速高质量的应用容器化迁移

    暑期实习期间,所在的技术中台-效能研发团队规划设计并结合公司开源协同实现符合DevOps理念的研发工具平台,实现研发过程自动化.标准化: 实习期间对DevOps的理解一直懵懵懂懂,最近观看了阿里专家带 ...

  8. 王道考研 计算机网络笔记 第六章:应用层

    本文基于2019 王道考研 计算机网络: 2019 王道考研 计算机网络 个人笔记总结 第一章:王道考研 计算机网络笔记 第一章:概述&计算机网络体系结构 第二章:王道考研 计算机网络笔记 第 ...

  9. 王道考研 计算机网络笔记 第五章:传输层

    本文基于2019 王道考研 计算机网络: 2019 王道考研 计算机网络 个人笔记总结 第一章:王道考研 计算机网络笔记 第一章:概述&计算机网络体系结构 第二章:王道考研 计算机网络笔记 第 ...

最新文章

  1. ARM架构中MMU/TLB/Cache的一些概念和寄存器
  2. mysql 远程连接取消权限_MYSQL远程登录权限设置
  3. 如何将本地MySQL提交到网络_如何把本地MySql数据库移植到远程服务器上
  4. 特斯拉明年会有100万辆自动驾驶出租车 你敢坐吗?
  5. mysql 存储过程复杂查询_SQL分页存储过程 支持连接查询等复杂的SQL
  6. 在职场,没有永远的朋友,也没有永远的敌人,因为只有利益
  7. PHP中header和session_start前不能有输出的原因
  8. C++基础——类继承中方法重载
  9. 曼联足球俱乐部披露安全漏洞
  10. 《算法竞赛入门经典》——刘汝佳
  11. iPad中国内地商标权诉讼调查
  12. 0704函数的递归调用
  13. 四足机器人足端轨迹规划--摆线
  14. 短视频课堂丨传统工厂企业短视频打造之“三好人设”
  15. LoRa码元、码片、信号带宽、编码率等解析
  16. 多表关联查询(Oracle)
  17. win10系统dnf安装不上服务器失败,win10系统玩DNF提示图标系统组建失败的解决方法...
  18. 话说会火到2019年的句子
  19. 【Labview学习】——如何实现软件的中/英文切换
  20. Ensp华为模拟器 win10系统 中安装WinPcap4.1.3 出现 A newer version of winpaca(。。)问题

热门文章

  1. 走进Java接口测试之测试报告ExtentReport
  2. NumPy 布尔索引
  3. elementUI NavMenu组件 popper-class使用
  4. 小米10获取root权限_OPPO A33(移动4G)ROOT教程,简单获取ROOT权限
  5. 《数字化转型工作手册》【附PPT】
  6. spark dataframe 数据类型转换
  7. 某live平台生产环境E-MR配置情况一览
  8. day2 链接、标签、锚点、案例
  9. 高校信息泄露成常态,2万余名学生个人信息被贩卖
  10. 39,数据库(01)