|
1. 通过Intent传递一些二进制数据的方法有哪些?
1). 使用Serializable接口实现序列化,这是java常用的方法。
2). 实现Parcelable接口,这里Android的部分类比如: Bitmap类就已经实现了,同时Parcelable在Android AIDL中交换数据也很常见的。大家可以去文档中搜下Parcelable,具体看看。
2. 请介绍下Android中常用的五种布局。
FrameLayout(框架布局)
LinearLayout (线性布局)
AbsoluteLayout(绝对布局)
RelativeLayout(相对布局)
TableLayout(表格布局)
3. 请介绍下Android的数据存储方式。
一.SharedPreferences方式
二.文件存储方式
三.SQLite数据库方式
四.内容提供器(Content provider)方式
五. 网络存储方式
4. android:paddingLeft与android:layout_marginLeft的区别
当按钮分别设置以上两个属性时,得到的效果是不一样的。
android:paddingLeft="30px"
按钮上设置的内容(例如图片)离按钮左边边界30个像素
android:layout_marginLeft="30px"
整个按钮离左边设置的内容30个像素
5. sim卡的EF文件有何作用
sim卡的文件系统有自己规范,主要是为了和手机通讯,sim本身可以有自己的操作系统,EF就是作存储并和手机通讯用的
6. 嵌入式操作系统内存管理有哪几种, 各有何特性?
页式,段式,段页,用到了MMU,虚拟空间等技术
7. 什么是嵌入式实时操作系统, Android操作系统属于实时操作系统吗?
分硬实时和软实时,android属于linux内核,linux在用户空间可抢占,内核空间在2.4以后可局部抢占,严格来讲 Android属于软实时系统。
嵌入式实时操作系统是指当外界事件或数据产生时,能够接受并以足够快的速度予以处理,其处理的结果又能在规定的时间之内来控制生产过程或对处理系统作出快速响应,并控制所有实时任务协调一致运行的嵌入式操作系统。主要用于工业控制、军事设备、 航空航天等领域对系统的响应时间有苛刻的要求,这就需要使用实时系统。又可分为软实时和硬实时两种,而android是基于linux内核的,因此属于软实时。
8. 一条最长的短信息约占多少byte?
一条短信可以输入
中文: 70(包括标点)
英文160
160个字节
9. Android都有哪些XML解析器,都熟练掌握吗?
这里Xml:Pull、SAX和DOM相信做过Web开发的都已经滚瓜烂熟了。
10. SQLite支持事务吗? 添加删除如何提高性能?
SQLite是支持事务的。SQLite作为轻量级的数据库,比MySQL还小,但支持SQL语句查询,提高性能可以考虑通过原始经过优化的SQL查询语句方式处理。
11. handler机制的原理
andriod提供了 Handler 和 Looper 来满足线程间的通信。Handler 先进先出原则。Looper类用来管理特定线程内对象之间的消息交换(Message Exchange)。
1)Looper: 一个线程可以产生一个Looper对象,由它来管理此线程里的Message Queue(消息队列)。
2)Handler: 你可以构造Handler对象来与Looper沟通,以便push新消息到Message Queue里;或者接收Looper从Message Queue取出)所送来的消息。
3) Message Queue(消息队列):用来存放线程放入的消息。
4)线程:UI thread 通常就是main thread,而Android启动程序时会替它
建立一个Message Queue。
12. 说说mvc模式的原理,它在android中的运用
MVC(Model_view_contraller)” 模型_视图_控制器”。 MVC应用程序总是由这三个部分组成。Event(事件)导致Controller改变Model或View,或者同时改变两者。只要 Controller改变了Models的数据或者属性,所有依赖的View都会自动更新。类似的,只要Controller改变了View,View会从潜在的Model中获取数据来刷新自己。
13. 你如何评价Android系统?优缺点。
优势:
一、开放性 三、丰富的硬件选择 五、无缝结合的Google应用支持
缺点: 一、安全和隐私
二,开发商自定义,不够统一 四、同类机型用户减少
14. Android本身的api并未声明会抛出异常,则其在运行时有无可能抛出runtime异常,你遇到过吗?诺有的话会导致什么问题?如何解决?
会有运行时异常, 运行时异常无需捕捉
15. Android 动画有哪几种?描述一下
两种。 Tween动画和Frame动画。 Tween动画主要是透明度、尺寸伸缩、旋转、位移等效果。Frame动画可以理解成gif, 一帧一帧的显示图片。比较常用的有滚动条效果。
16. 隐式、显式Intent的区别
显式意图
通过名字指明目标组件(这个组件名字字段component name field,
前面提到过,有一个数值集)。既然组件名称通常不为其他应用程序的开发者所了解,显式意图典型的被用作应用程序的内部消息-例如一个活动启动一个附属服务或姊妹活动。
隐式意图
不命名目标组件(组件名称字段为空)。隐式意图经常用来激活其他应用程序的组件。
17. 如何将一个Activity设置成窗口的样式。
在AndroidManifest.xml 中定义Activity的地方一句话,让Activity变成一个窗口:
讲点轻松的吧,可能有人希望做出来的应用程序是一个漂浮在手机主界面的东西,那么很简单你只需要设置一下Activity的主题就可以了。在AndroidManifest.xml 中定义 Activity的地方一句话:
Xml代码 android :theme="@android:style/Theme.Dialog" ,这就使你的应用程序变成对话框的形式弹出来了,
或者Xml代码 android:theme="@android:style/Theme.Translucent" ,就变成半透明的。
[友情提示]类似的这种activity的属性可以在android.R.styleable 类的AndroidManifestActivity 方法中看到,AndroidManifest.xml中所有元素的属性的介绍都可以参考这个类android.R.styleable
上面说的是属性名称,具体有什么值是在android.R.style中 可以看到,比如
这个"@android:style/Theme.Dialog" 就对应于android.R.style.Theme.Dialog ,就可以用在描述文件 中了,找找类定义和描述文件中的对应关系就都明白了。
18. 请介绍下ContentProvider是如何实现数据共享的。
创建一个属于你自己的Content provider或者将你的数据添加到一个已经存在的Content provider中,前提是有相同数据类型并且有写入Content provider的权限。
19. 什么情况会导致Force Close?如何避免?能否捕获导致其的异常?
一般像空指针啊,可以看logcat,然后对应到程序中来解决错误
20. Android dvm的进程和Linux的进程, 应用程序的进程是否为同一个概念
DVM指dalivk的虚拟机, 每一个Android应用程序都在它自己的进程中运行,都拥有一个独立的Dalvik虚拟机实例。而每一个DVM都是在Linux 中的一个进程,所以说可以认为是同一个概念。
DVM执行时,在linux看来就是一应用程序进程,所以说是同一概念
21.怎样启动一个服务,怎样停止一个服务?
启动:Context.startService() and Context.bindService().
关闭: Context.stopService(). Service.stopSelf()
or Service.stopSelfResult()
22. DDMS与TraceView的区别?
DDMS是一个程序执行查看器,在里面你可以看见线程和堆栈等信息,TraceView是程序性能分析器
23. View的刷新:
在需要刷新的地方,使用handle.sendmessage发送信息,然后在handle的getmessage里面执行invaliate(UI线程)或者postinvaliate(非UI线程).
24. GC内存泄露,出现情况:
1.数据库的cursor没有关闭
2.构造adapter时,没有使用缓存contentview衍生listview的优化问题-----减少创建view的对象, 充分使用contentview,可以使用一静态类来优化处理getview的过程
3.Bitmap对象不使用时采用recycle()释放内存
4.activity中的对象的生命周期大于activity
调试方法: DDMS==> HeapSize==>dataobject==>[Total Size]
25. activity被回收了怎么办?
activity回收了,那就只有另起了.请参照Activity生命周期,如果被系统destroy了,也就是说的回收,只有从新start了
26. 在Java中如何引入C语言?
java调用C语言程序,可以用JNI接口来实现
27. 简要解释一下activity、 intent 、intent filter、service、Broadcast、BroadcaseReceiver
Android中,Activity是所有程序的根本,所有程序的流程都运行在Activity之中,Activity具有自己的生命周期。
Android中提供了Intent机制来协助应用间的交互与通讯,Intent负责对应用中一次操作的动作、动作涉及数据、附加数据进行描述,Android则根据此Intent的描述,负责找到对应的组件,将 Intent传递给调用的组件,并完成组件的调用。Intent不仅可用于应用程序之间,也可用于应用程序内部的Activity/Service之间的交互
service是没有界面的长生命周期的代码。一个很好的例子是媒体播放器从列表中播放歌曲。在一个媒体播放器程序中,大概要有一个或多个活动(activity)来供用户选择歌曲并播放它。然而,音乐的回放就不能使用活动(activity)了,因为用户希望他导航到其他界面时音乐继续播放。这种情况下,媒体播放器活动(activity)要用Context.startService()启动一个服务来在后台运行保持音乐的播放。系统将保持这个音乐回放服务的运行直到它结束。注意一下,你要用Context.bindService()方法连接服务(如果它没有运行,要先启动它)。
在Android中,Broadcast是一种广泛运用的在应用程序之间传输信息的机制。而BroadcastReceiver是对发送出来的 Broadcast进行过滤接受并响应的一类组件
http://blog.csdn.net/Zengyangtech/archive/2010/11/21/6025676.aspx
一个activity呈现了一个用户可以操作的可视化用户界面
一个service不包含可见的用户界面,而是在后台无限地运行
可以连接到一个正在运行的服务中,连接后,可以通过服务中暴露出来的借口与其进行通信
一个broadcast receiver是一个接收广播消息并作出回应的component,broadcast receiver没有界面
intent:content provider在接收到ContentResolver的请求时被激活。
activity, service和broadcast receiver是被称为intents的异步消息激活的。
一个intent是一个Intent对象,它保存了消息的内容。对于activity和service来说,它指定了请求的操作名称和待操作数据的URI
Intent对象可以显式的指定一个目标component。如果这样的话,android会找到这个component(基于manifest文件中的声明)并激活它。但如果一个目标不是显式指定的,android必须找到响应intent的最佳component。
它是通过将Intent对象和目标的intent filter相比较来完成这一工作的。一个component的intent filter告诉android该component能处理的intent。intent filter也是在manifest文件中声明的。
28. IntentService有何优点?
其实它也是避免ANR的方法:
IntentService 的好处
* Acitivity的进程,当处理Intent的时候,会产生一个对应的Service
* Android的进程处理器现在会尽可能的不kill掉你
* 非常容易使用
IntentService is a base class for Services that handle asynchronous requests (expressed as Intents) on demand. Clients send requests through startService(Intent) calls; the service is started as needed, handles each Intent in turn using a worker thread, and stops itself when it runs out of work.
This ‘work queue processor’ pattern is commonly used to offload tasks from an application’s main thread. The IntentService class exists to simplify this pattern and take care of the mechanics. To use it, extend IntentService and implement onHandleIntent(Intent). IntentService will receive the Intents, launch a worker thread, and stop the service as appropriate.
All requests are handled on a single worker thread — they may take as long as necessary (and will not block the application’s main loop), but only one request will be processed at a time.”
IntentService 的好处
Acitivity的进程,当处理Intent的时候,会产生一个对应的Service
Android的进程处理器现在会尽可能的不kill掉你非常容易使用
日历中IntentService的应用
public class DismissAllAlarmsService extends IntentService {
@Override public void onHandleIntent(Intent unusedIntent) {
ContentResolver resolver = getContentResolver();
…
resolver.update(uri, values, selection, null);
}
}
in AlertReceiver extends BroadcastReceiver, onReceive(): (main thread)
Intent intent = new Intent(context, DismissAllAlarmsService.class);
context.startService(intent);
29. 根据自己的理解描述下Android数字签名
在Android系统中,所有安装到系统的应用程序都必有一个数字证书,此数字证书用于标识应用程序的作者和在应用程序之间建立信任关系,如果一个permission的protectionLevel为signature,那么就只有那些跟该permission所在的程序拥有同一个数字证书的应用程序才能取得该权限。Android使用Java的数字证书相关的机制来给apk加盖数字证书,要理解android的数字证书,需要先了解以下数字证书的概念和java的数字证书机制。Android系统要求每一个安装进系统的应用程序都是经过数字证书签名的,数字证书的私钥则保存在程序开发者的手中。Android将数字证书用来标识应用程序的作者和在应用程序之间建立信任关系,不是用来决定最终用户可以安装哪些应用程序。这个数字证书并不需要权威的数字证书签名机构认证,它只是用来让应用程序包自我认证的。
同一个开发者的多个程序尽可能使用同一个数字证书,这可以带来以下好处。
(1)有利于程序升级,当新版程序和旧版程序的数字证书相同时,Android系统才会认为这两个程序是同一个程序的不同版本。如果新版程序和旧版程序的数字证书不相同,则Android系统认为他们是不同的程序,并产生冲突,会要求新程序更改包名。
(2)有利于程序的模块化设计和开发。Android系统允许拥有同一个数字签名的程序运行在一个进程中,Android程序会将他们视为同一个程序。所以开发者可以将自己的程序分模块开发,而用户只需要在需要的时候下载适当的模块。
(3)可以通过权限(permission)的方式在多个程序间共享数据和代码。Android提供了基于数字证书的权限赋予机制,应用程序可以和其他的程序共享概功能或者数据给那那些与自己拥有相同数字证书的程序。如果某个权限(permission)的protectionLevel是signature,则这个权限就只能授予那些跟该权限所在的包拥有同一个数字证书的程序。
在签名时,需要考虑数字证书的有效期:
(1)数字证书的有效期要包含程序的预计生命周期,一旦数字证书失效,持有改数字证书的程序将不能正常升级。
(2)如果多个程序使用同一个数字证书,则该数字证书的有效期要包含所有程序的预计生命周期。
(3)Android Market强制要求所有应用程序数字证书的有效期要持续到2033年10月22日以后。
Android数字证书包含以下几个要点:
(1)所有的应用程序都必须有数字证书,Android系统不会安装一个没有数字证书的应用程序
(2)Android程序包使用的数字证书可以是自签名的,不需要一个权威的数字证书机构签名认证
(3)如果要正式发布一个Android ,必须使用一个合适的私钥生成的数字证书来给程序签名,而不能使用adt插件或者ant工具生成的调试证书来发布。
(4)数字证书都是有有效期的,Android只是在应用程序安装的时候才会检查证书的有效期。如果程序已经安装在系统中,即使证书过期也不会影响程序的正常功能。
本文来自博客,转载请标明出处:http://blog.csdn.net/Zengyangtech/archive/2010/11/21/6025680.aspx
30. 调用与被调用:我们的通信使者Intent
要说Intent了,Intent就是这个这个意图 ,应用程序间Intent进行交流,打个电话啦,来个电话啦都会发Intent, 这个是Android架构的松耦合的精髓部分,大大提高了组件的复用性,比如你要在你的应用程序中点击按钮,给某人打电话,很简单啊,看下代码先:
Java代码
Intent intent = new Intent();
intent.setAction(Intent.ACTION_CALL);
intent.setData(Uri.parse("tel:" + number));
startActivity(intent);
Intent intent = new Intent(); intent.setAction(Intent.ACTION_CALL); intent.setData(Uri.parse("tel:" + number)); startActivity(intent);
扔出这样一个意图,系统看到了你的意图就唤醒了电话拨号程序,打出来电话。什么读联系人,发短信啊,邮件啊,统统只需要扔出intent就好了,这个部分设计地确实很好啊。
那Intent通过什么来告诉系统需要谁来接受他呢?
通常使用Intent有两种方法,第一种是直接说明需要哪一个类来接收代码如下:
Java代码
Intent intent = new Intent(this, MyActivity.class);
intent.getExtras().putString("id", "1");
startActivity(intent);
Intent intent = new Intent(
this,MyActivity.class);intent.getExtras().putString("id", "1");
startActivity(intent);
第一种方式很明显,直接指定了MyActivity为接受者,并且传了一些数据给MyActivity,在MyActivity里可以用getIntent()来的到这个intent和数据。
第二种就需要先看一下AndroidMenifest中的intentfilter的配置了
Xml代码
<intent-filter>
<action android:name="android.intent.action.VIEW" />
<action android:value="android.intent.action.EDIT" />
<action android:value="android.intent.action.PICK" />
<category android:name="android.intent.category.DEFAULT" />
<data android:mimeType="vnd.android.cursor.dir/vnd.google.note" />
</intent-filter>
<intent-filter>
<action android:name="android.intent.action.VIEW" />
<action android:value="android.intent.action.EDIT" />
<action android:value="android.intent.action.PICK" />
<category android:name="android.intent.category.DEFAULT" />
<data android:mimeType="vnd.android.cursor.dir/vnd.google.note" />
</intent-filter>
这里面配置用到了action, data, category这些东西,那么聪明的你一定想到intent里也会有这些东西,然后一匹配不就找到接收者了吗?
action其实就是一个意图的字符串名称。上面这段intent-filter的配置文件说明了这个Activity可以接受不同的 Action,当然相应的程序逻辑也不一样咯,提一下那个mimeType,他是在ContentProvider里定义的,你要是自己实现一个ContentProvider就知道了,必须指定 mimeType才能让数据被别人使用。
不知道原理说明白没,总结一句,就是你调用别的界面不是直接new那个界面,而是通过扔出一个intent,让系统帮你去调用那个界面,这样就多么松藕合啊,而且符合了生命周期被系统管理的原则。
想知道category都有啥,Android为你预先定制好的action都有啥等等,请亲自访问官方链接Intent
ps:想知道怎么调用系统应用程序的同学,可以仔细看一下你的logcat,每次运行一个程序的时候是不是有一些信息比如:
Starting activity: Intent { action=android.intent.action.MAINcategories={android.intent.category.LAUNCHER} flags=0x10200000comp={com.android.camera/com.android.camera.GalleryPicker} }
再对照一下Intent的一些set方法,就知道怎么调用了。 |
|