[转载]android一些、面试题
1.
(1)父Activity启动子Activity,子Actvity退出,父Activity调用顺序如下
AAA --> onFreeze() --> onPause()
--> onStop() --> onRestart()
--> onStart(),onResume() …
(2)用户点击Home,Actvity调用顺序如下
AAA --> onFreeze() --> onPause()
--> onStop() -- Maybe --> onDestroy()
– Maybe
(3)调用finish(), Activity调用顺序如下
AAA --> onPause() --> onStop()
--> onDestroy()
(4)在Activity上显示dialog, Activity调用顺序如下
AAA
(5)在父Activity上显示透明的或非全屏的activity,Activity调用顺序如下
AAA --> onFreeze() -->
onPause()
(6)设备进入睡眠状态,Activity调用顺序如下
AAA --> onFreeze() --> onPause()
2.
3.
4.
对于单一Activity的应用来说,退出很简单,直接finish()即可。
当然,也可以用killProcess()和System.exit()这样的方法。
http://blog.csdn.net/debug2/archive/2011/02/18/6193644.aspx
1、抛异常强制退出:
该方法通过抛异常,使程序Force Close。
验证可以,但是,需要解决的问题是,如何使程序结束掉,而不弹出Force Close的窗口。
2、记录打开的Activity:
每打开一个Activity,就记录下来。在需要退出时,关闭每一个Activity即可。
3、发送特定广播:
在需要结束应用时,发送一个特定的广播,每个Activity收到广播后,关闭即可。
4、递归退出
在打开新的Activity时使用startActivityForResult,然后自己加标志,在onActivityResult中处理,递归关闭。
除了第一个,都是想办法把每一个Activity都结束掉,间接达到目的。
但是这样做同样不完美。
你会发现,如果自己的应用程序对每一个Activity都设置了nosensor,在两个Activity结束的间隙,sensor可能有效了。
但至少,我们的目的达到了,而且没有影响用户使用。
为了编程方便,最好定义一个Activity基类,处理这些共通问题。
5.
FrameLayout(框架布局),LinearLayout (线性布局),AbsoluteLayout(绝对布局),RelativeLayout(相对布局),TableLayout(表格布局)
6.
Android提供了4种方式存储数据:
--使用SharedPreferences存储数据;------------------解析的XML文件用来存储。
--文件存储数据;----------------------输入输出流
--SQLite数据库存储数据;
--使用ContentProvider存储数据;--------------可以存储在SQLite里面,也可以存储在内容解析器(Android自带的一个解析类)里面。
7.
创建一个属于你自己的Content provider或者将你的数据添加到一个已经存在的Content provider中,前提是有相同数据类型并且有写入Content provider的权限。
8.
服务类继承自service清单文件中注册 enabled属性设为true
开始一个服务使用startservice方法,停止一个服务使用stopservice方法
9.
引入广播机制可以方便几大组件的信息和数据交互。
b:程序间互通消息(例如在自己的应用程序内监听系统来电)
c:效率上(参考UDP的广播协议在局域网的方便性)
d:设计模式上(反转控制的一种应用,类似监听者模式)
10.
android提供了 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。
11.
Android Interface Define Language见aidl的笔记
12.
13.
14.
15.
5、一条最长的短信息约占多少byte?
中文70(包括标点),英文160,160个字节。
ANR:Application Not Responding,五秒。把耗时量大的任务放到新建的子线程中。使用这种方法涉及你的应用程序,能够保证你的程序对输入保持良好的响应,从而避免因为输入事件超过5秒钟不被处理而产生的ANR。
16.Intentservice的 好处Activity的进程,当处理intent的时候,会产生一个对应的Service
Android的进程处理器现在回尽可能的不kill掉你
17.android中线程的处理方法
每当一个程序第一次启动时候都会启动一个main thread 该线程主要处理与UI相关的事件,比如按键事件。
子线程和ui的更新通过 handler处理msg消息队列使用sendmessage方法或者post方法post方法发送的是一个runnable对象。
Looper是每条线程里的message queue的管家。因为子线程里没有mq所以调用looper里的getMainlooper方法这样得到的主线程的looper不为null。
Looper。Loop方法运行开始后,循环的按照接受顺序取出非空的mq
当sendmessage方法执行时 该函数设置了那个msg对象的target属性是当前的hander对象
随后looper取出了那个msg则调用该msg的target只想的handler的dispatchMessage方法
在该方法里用户指定三个判断优先级由高到低
1)
2)
3)
最后handler处理完message对象之后looper设置该msg对象为null以便回收
主线程和子线程如何交互最终谁来处理信息?
判断handler对象里面的looper对象属于哪条线程的则由该线程执行
1)
18.GBK
UTF8它对英文使用8位(即一个字节),中文使用24为(三个字节)来编码
GBK的文字编码是用双字节来表示的,即不论中、英文字符均使用双字节来表示
GB2312和GBK是一样的
19. 如何将SQLite数据库(dictionary.db文件)与apk文件一起发布?
解答:可以将dictionary.db文件复制到Eclipse Android工程中的res aw目录中。所有在res aw目录中的文件不会被压缩,这样可以直接提取该目录中的文件。
20.在Android中不能直接打开res aw目录中的数据库文件,而需要在程序第一次启动时将该文件复制到手机内存或SD卡的某个目录中,然后再打开该数据库文件。复制的基本方法是使用getResources().openRawResource方法获得res aw目录中资源的 InputStream对象,然后将该InputStream对象中的数据写入其他的目录中相应文件中。在Android SDK中可以使用SQLiteDatabase.openOrCreateDatabase方法来打开任意目录中的SQLite数据库文件
4、简要解释一下activity、 intent 、intent filter、service、Broadcase、BroadcaseReceiver
答:一个activity呈现了一个用户可以操作的可视化界面
一个service不包含可见的用户界面,可以在后台无限运行。可以连接到一个正在运行的服务中,连接后可以通过服务中的接口对其通信
一个broadcast receiver 是一个接收广播消息并做出回应的组件。广播接收者没有界面
一个intent是一个intent对象,他保存了消息的内容。对于activity和service来说,它指定了请求的操作名称和待操作数据的URI。Intent对象可以显式的指定一个目标组件。如果这样的话,android会找到这个component(基于manifest文件中的声明)并激活它。但如果一个目标不是显式指定的,android必须找到响应intent的最佳component。是通过将Intent对象和目标的intent filter相比较来完成这一工作的。一个component的intent filter告诉android该component能处理的intent。intent filter也是在manifest文件中声明的.
为了保证程序的正确性,你要在onPause()里写上持久层操作的代码,将用户编辑的内容都保存到存储介质上(一般都是数据库 )。实际工作中因为生命周期的变化而带来的问题也很多,比如你的应用程序起了新的线程在跑,这时候中断了,你还要去维护那个线程,是暂停还是杀掉还是数据回滚,是吧?因为Activity可能被杀掉,所以线程中使用的变量和一些界面元素就千万要注意了,一般我都是采用Android的消息机制 [Handler,Message]来处理多线程和界面交互的问题。这个我后面会讲一些,最近因为这些东西头已经很大了,等我理清思绪再跟大家分享。