*45.描述下横竖屏切换时候 activity 的生命周期
不设置Activity的android:configChanges时,切屏会从新调用各个生命周期,切横屏时会执行一次,切竖屏时会执行两次.
设置Activity的android:configChanges="orientation"时,切屏仍是会从新调用各个生命周期,切横、竖屏时只会执行一次.
设置Activity的android:configChanges="orientation|keyboardHidden"时,切屏不会从新调用各个生命周期,只会执行onConfigurationChanged方法.
46.android 中的动画有哪几种,它们的特色和区别是什么 ?
两种,一种是补间动画(Tween)动画、还有一种是帧动画(Frame)动画。Tween动画,这种实现方式可使视图组件移动、放大、缩小以及产生透明度的变化;另外一种Frame动画,传统的动画方法,经过顺序的播放排列好的图片来实现,相似电影。
47.一条最长的短信息约占多少 byte?
140byte,70个汉字。
48.描述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。
49.如何将 SQLite 数据库 (dictionary.db 文件 ) 与 apk 文件一块儿发布 ?
能够将dictionary.db文件复制到Eclipse Android工程中的res\raw目录中。全部在res\raw目录中的文件不会被压缩,这样能够直接提取该目录中的文件。
使用openDatabase方法来打开数据库文件,若是该文件不存在,系统会自动建立/sdcard/dictionary目录,并将res\raw目录中的 dictionary.db文件复制到/sdcard/dictionary目录中
50.说说 android 中 mvc 的具体体现
mvc是model,view,controller的缩写,mvc包含三个部分:
模型(model)对象:是应用程序的主体部分,全部的业务逻辑都应该写在该层。
视图(view)对象:是应用程序中负责生成用户界面的部分。也是在整个mvc架构中用户惟一能够看到的一层,接收用户的输入,显示处理结果。
控制器(control)对象:是根据用户的输入,控制用户界面数据显示及更新model对象状态的部分,控制器更重要的一种导航功能,响应用户出发的相关事件,交给m层处理。
android鼓励弱耦合和组件的重用,在android中mvc的具体体现以下:
1)视图(view):通常采用xml文件进行界面的描述,使用的时候能够很是方便的引入。
2)控制层(controller):android的控制层的重任一般落在了众多的acitvity的肩上,这句话也就暗含了不要在acitivity中写过多的代码,要经过activity交割model业务逻辑层处理,这样作的另一个缘由是android中的acitivity的响应时间是5s,若是耗时的操做放在这里,程序就很容易被回收掉。
3)模型层(model):对数据库的操做、对网络等的操做都应该在model里面处理,固然对业务计算等操做也是必须放在的该层的。
51.请介绍下 Android 中经常使用的五种布局
帧布局(FrameLayout)
线性布局(LinearLayout)
表格布局(TableLayout)
相对布局(RelativeLayout)
绝对布局(AbsoluteLayout)
52.如何启用 Service ,如何停用 Service
1)startService用于启动Service、stopService中止Service。
2)bindService绑定Service,unbindService解除Service的绑定。
53.如何优化ListView
一、若是自定义适配器,那么在getView方法中要考虑方法传进来的参数contentView是否为null,若是为null就建立contentView并返回,若是不为null则直接使用。在这个方法中尽量少建立view。
二、给contentView设置tag(setTag()),传入一个viewHolder对象,用于缓存要显示的数据,能够达到图像数据异步加载的效果。
三、若是listview须要显示的item不少,就要考虑分页加载。好比一共要显示100条或者更多的时候,咱们能够考虑先加载20条,等用户拉到列表底部的时候再去加载接下来的20条。
54.描述4 种 activity 的启动模式
1)standard :系统的默认模式,一次跳转即会生成一个新的实例。假设有一个activity命名为MainActivity,执行语句:
startActivity(new Intent(MainActivity.this, MainActivity.class))后,MainActivity将跳转到另一个MainActivity,也就是如今的Task栈里面有MainActivity的两个实例。按返回键后你会发现仍然是在MainActivity(第一个)里面。
2)singleTop:singleTop 跟standard 模式比较相似。若是已经有一个实例位于Activity栈的顶部时,就不产生新的实例,而只是调用Activity中的newInstance()方法。若是不位于栈顶,会产生一个新的实例。例:当MainActivity为 singleTop 模式时,执行跳转后栈里面依旧只有一个实例,若是如今按返回键程序将直接退出。
3)singleTask: singleTask模式和后面的singleInstance模式都是只建立一个实例的。在这种模式下,不管跳转的对象是否是位于栈顶的activity,程序都不会生成一个新的实例(固然前提是栈里面已经有这个实例)。这种模式至关有用,在之后的多activity开发中,常常会由于跳转的关系致使同个页面生成多个实例,这个在用户体验上始终有点很差,而若是你将对应的activity声明为 singleTask 模式,这种问题将不复存在。
4)singleInstance: 设置为 singleInstance 模式的 activity 将独占一个task(感受task能够理解为进程),独占一个task的activity与其说是activity,倒不如说是一个应用,这个应用与其余activity是独立的,它有本身的上下文activity。
55.什么是Intent,如何使用?
Android基本的设计理念是鼓励减小组件间的耦合,所以Android提供了Intent (意图) ,Intent提供了一种通用的消息系统,它容许在你的应用程序与其它的应用程序间传递Intent来执行动做和产生事件。使用Intent能够激活Android应用的三个核心组件:活动、服务和广播接收器。
经过startActivity() orstartActivityForResult()启动一个Activity;
过 startService() 启动一个服务,或者经过bindService() 和后台服务交互;
经过广播方法(好比 sendBroadcast(),sendOrderedBroadcast(),sendStickyBroadcast())发给broadcast receivers
56.Android用的数据库是什么样的?它和sql有什么区别?为何要用ContentProvide?它和sql的实现上有什么差异?
Adnroid用的是SQLite数据库。它和其余网络数据库相似,也是经过SQL对数据进行管理。SQLite的操做很是简单,包括数据类型在建表时也能够不指定。
使用ContentProvider 能够将数据共享给其余应用,让除本应用以外的应用也能够访问本应用的数据。它的底层是用SQLite 数据库实现的,因此其对数据作的各类操做都是以Sql实现,只是在上层提供的是Uri。
57.经过Intent传递一些二进制数据的方法有哪些?
1)使用Serializable接口实现序列化,这是Java经常使用的方法。
2)实现Parcelable接口,这里Android的部分类好比Bitmap类就已经实现了,同时Parcelable在Android AIDL中交换数据也很常见的。
58.对一些资源以及状态的操做保存,最好是保存在生命周期的哪一个函数中进行?
onResume()恢复数据、onPause()保存数据。