android151 笔记

13. 14 .什么是Service以及描述下它的生命周期。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的时候都会去这个里面找。
时间: 2024-11-04 22:56:46

android151 笔记的相关文章

android151 笔记 3

34. 对android虚拟机的理解,包括内存管理机制垃圾回收机制. 虚拟机很小,空间很小,谈谈移动设备的虚拟机的大小限制 16M , 谈谈加载图片的时候怎么处理大图片的,压缩. 垃圾回收,没有引用的对象,在某个时刻会被系统gc掉,跟java一样. 35. Framework工作方式及原理,Activity是如何生成一个view的,机制是什么. 反射+配置文件来做的.可以讲下activity的源码,比如说 每个activity里面都有window.callback和keyevent.callba

【安全牛学习笔记】

弱点扫描 ╋━━━━━━━━━━━━━━━━━━━━╋ ┃发现弱点                                ┃ ┃发现漏洞                                ┃ ┃  基于端口五福扫描结果版本信息(速度慢)┃ ┃  搜索已公开的漏洞数据库(数量大)      ┃ ┃  使用弱点扫描器实现漏洞管理            ┃ ╋━━━━━━━━━━━━━━━━━━━━╋ [email protected]:~# searchsploit Usage:

51CTO持续更新《通哥的运维笔记》

<通哥的运维笔记>将持续在51CTO网站更新,希望大家多多关注.互相学习,后期,我将会退出<通哥的运维笔记>系列视频教程,希望带给大家最大的收获,帮助大家更好的学习.进步.<通哥的运维笔记>主要从linux系统管理.虚拟化.cloudstack云平台以及网络管理之CCNA.CCNP.CCIE,等等方面深入讲解.

WPF笔记整理 - Bitmap和BitmapImage

项目中有图片处理的逻辑,因此要用到Bitmap.而WPF加载的一般都是BitmapImage.这里就需要将BitmapImage转成Bitmap 1. 图片的路径要用这样的,假设图片在project下的Images目录,文件名XXImage.png. pack://application:,,,/xxx;component/Images/XXImage.png 2. 代码: Bitmap bmp = null; var image = new BitmapImage(new Uri(this.X

java String 类 基础笔记

字符串是一个特殊的对象. 字符串一旦初始化就不可以被改变. String s = "abc";//存放于字符串常量池,产生1个对象 String s1=new String("abc");//堆内存中new创建了一个String对象,产生2个对象 String类中的equals比较字符串中的内容. 常用方法: 一:获取 1.获取字符串中字符的个数(长度):length();方法. 2.根据位置获取字符:charAt(int index); 3.根据字符获取在字符串中

vector 学习笔记

vector 使用练习: /**************************************** * File Name: vector.cpp * Author: sky0917 * Created Time: 2014年04月27日 11:07:33 ****************************************/ #include <iostream> #include <vector> using namespace std; int main

学习笔记之邮件发送篇

用脚本语言发送邮件是系统管理员必备技能 对系统定期检查或者当服务器受到攻击时生成文档和报表. 发布这些文档最快速有效的方法就是发送邮件. python中email模块使得处理邮件变得比较简单 发送邮件主要用到了smtplib和email两个模块,这里首先就两个模块进行一下简单的介绍: 本段摘录于    http://www.cnblogs.com/xiaowuyi/archive/2012/03/17/2404015.html 1.smtplib模块 smtplib.SMTP([host[, p

15.1-全栈Java笔记:Java事件模型是什么?事件控制的过程有哪几步??

应用前边两节上一章节的内容,大家可以完成一个简单的界面,但是没有任何的功能,界面完全是静态的,如果要实现具体功能的话,必须要学习事件模型. 事件模型简介及常见事件模型 对于采用了图形用户界面的程序来说,事件控制是非常重要的. 一个源(事件源)产生一个事件并把它(事件对象)送到一个或多个监听器那里,监听器只是简单地等待,直到它收到一个事件,一旦事件被接收,监听器将处理这些事件. 一个事件源必须注册监听器以便监听器可以接收关于一个特定事件的通知. 每种类型的事件都有其自己的注册方法,一般形式为: v

Java设计模式学习笔记,一:单例模式

开始学习Java的设计模式,因为做了很多年C语言,所以语言基础的学习很快,但是面向过程向面向对象的编程思想的转变还是需要耗费很多的代码量的.所有希望通过设计模式的学习,能更深入的学习. 把学习过程中的笔记,记录下来,只记干货. 第一部分:单例模式的内容 单例模式:类只能有一个实例. 类的特点:1.私有构造器:2.内部构造实例对象:3.对外提供获取唯一实例的public方法. 常见的单例模式实现有五种形式: 1.饿汉式. 2.懒汉式. 3.双重检查锁式. 4.静态内部类式. 5.枚举式. 以下分别