Android面试基础知识总结Word下载.docx
《Android面试基础知识总结Word下载.docx》由会员分享,可在线阅读,更多相关《Android面试基础知识总结Word下载.docx(35页珍藏版)》请在冰豆网上搜索。
在Activity第一次被创建的时候被调用。
这里是你做所有初始化设置的地方—创建视图、绑定数据至列表等。
如果曾经有状态记录(参阅后述Saving
Activity
State。
),则调用此方法时会传入一个包含着此activity以前状态的包对象做为参数
否
onStart()
在Activity正要变得为用户所见时被调用。
数据刷新时候调用!
!
当Activity转向前台时接着调用onResume()
在Activity变为隐藏时接着知行onStop()
onResume()
onStop()
在Activity开始与用户进行交互之前被调用。
此时Activity位于堆栈顶部,并接收用户输入。
onPause()
Activityrun……
Activity开始运行……………………
onPasue()
当系统将要启动另一个Activity时调用。
此方法主要用来将未保存的变化进行持久化,停止类似动画这样耗费CPU的动作等。
这一切动作应该在短时间内完成,因为下一个Activity必须等到此方法返回后才会继续。
当Activity重新回到前台会执行onResume()
【弹出对话框】。
当Activity变为用户不可见时会执行onStop()。
是
当Activity不再为用户可见时调用此方法。
这可能发生在它被销毁或者另一个Activity(可能是现存的或者是新的)回到运行状态并覆盖了它。
如果Activity再次回到前台跟用户交互则执行onRestart().
如果关闭Activity则执行onDestroy()
onRestart()
onDestroy()
在Activity销毁前调用。
这是Activity接收的最后一个调用。
这可能发生在Activity结束(调用了它的finish()方法)或因为系统需要空间所以临时的销毁了此Activity的实例时。
可以用isFinishing()方法来区分这两种情况。
已经完蛋了,还调用毛线!
1.3.2其他中转方法
在Activity停止后,在再次启动之前被调用。
之后执行onStart().
1.4Activity启动模式
1.4.1四种启动模式
standard
默认模式,可以不用写配置。
在这个模式下,都会默认创建一个新的实例。
因此,在这种模式下,可以有多个相同的实例,也允许多个相同Activity叠加。
singleTop
可以有多个实例,但是不允许多个相同Activity叠加。
即,如果Activity在栈顶的时候,启动相同的Activity,不会创建新的实例,而会调用其onNewIntent方法。
singleTask
只有一个实例。
在同一个应用程序中启动它的时候,若Activity不存在,则会在当前task创建一个新的实例,若存在,则会把task中在其之上的其它Activitydestory掉并调用它的onNewIntent方法。
如果是在别的应用程序中启动它,则会新建一个task,并在该task中启动这个Activity,singleTask允许别的Activity与其在一个task中共存,也就是说,如果我在这个singleTask的实例中再打开新的Activity,这个新的Activity还是会在singleTask的实例的task中。
singleInstance
只有一个实例,并且这个实例独立运行在一个task中,这个task只有这个实例,不允许有别的Activity存在。
1.4.2配置样例
<
activity
android:
name="
com.example.mobilesafe.WatchDogActivity"
launchMode="
singleInstance"
/>
1.5Activity启动方法
1)在一个Activity中调用startActivity()方法。
直接启动Activity,不带请求码。
2)在一个Activity中调用startActivityForResult()方法。
带请求码启动Activity。
1.6请求码与响应码
请求码(RequestCode)
在一个业务中可能在两个按钮被单击事件中打开同一个Activity,但我们在onActivityResult事件中如何判断是哪个按钮打开了新的Activity?
请求码就是为解决这个问题的,那么我们打开新的Activity时应该使用startActivityForResult(intent,1);
。
其中的第二个参数就是请求码。
结果码(ResultCode)
在一个业务中可能要打开多个不同的Activity,那关闭Activity时在onActivityResult事件中我们如何知道关闭的是哪一个Activity呢?
结果码就是为解决这个问题的,那么我们打开新的Activity时应该使用setResult(2,intent);
或在关闭Activity前调用ActivityObj.setResult
(2);
其中的第一个参数就是结果码。
在onActivityResult事件中,通过判断resultCode更可知道是哪个Activity被关闭了。
2BroadcastReceiver
2.1概念
BroadcastReceiver也就是“广播接收者”的意思,顾名思义,它就是用来接收来自系统和应用中的广播。
2.2应用场景
在Android系统中,广播体现在方方面面:
eg:
1.当开机完成后系统会产生一条广播,接收到这条广播就能实现开机启动服务的功能;
2.当锁屏或者点亮屏幕时就会产生一条广播,接收这条广播就可以实现一些暂停或者开启一些耗电进程的功能。
3.当网络状态改变时系统会产生一条广播,接收到这条广播就能及时地做出提示和保存数据等操作;
4.当电池电量改变时,系统会产生一条广播,接收到这条广播就能在电量低时告知用户及时保存进度;
2.3注册
2.3.1静态注册
2.3.1.1概念
静态注册是在AndroidManifest.xml文件中配置的。
2.3.2动态注册
2.3.2.1概念
动态注册需要在代码中动态的指定广播地址并注册。
2.3.2.2需要注意的事项
RegisterReceiver是android.content.ContextWrapper类中的方法,Activity和Service都继承了ContextWrapper,所以可以直接调用。
在实际应用中,我们在Activity或Service中注册了一个BroadcastReceiver,当这个Activity或Service被销毁时如果没有解除注册,系统会报一个异常,提示我们是否忘记解除注册了。
所以,需要在特定的地方执行解除注册操作:
生命周期的onDestroy()。
有部分广播接受者,涉及到用户的敏感内容,需要在权限文件中声明。
如开机完成的广播,用户电量变化的广播,用户网络状态发生改变的广播
2.3.3生命周期
1.广播接收者的生命周期是非常短暂的,在接收到广播的时候创建,onReceive()方法结束之后销毁
2.广播接收者中不要做一些耗时的工作,否则会弹出ApplicationNoResponse错误对话框
3.最好也不要在广播接收者中创建子线程做耗时的工作,因为广播接收者被销毁后进程就成为了空进程,很容易被系统杀掉
4.耗时的较长的工作最好放在服务中完成
3Service
3.1概念
服务是看不到界面的,,就是一个没有界面的Activity,并且长期在后台运行的一个组件.。
3.2为什么用服务?
进程优先级,回收时是从5~1,从低到高
Foregroundprocess前台进程
Visibleprocess可视进程
Serviceprocess服务进程
Backgroundprocess后台进程
Emptyprocess空进程
回收的优先级:
先回收空进程,一个一个回收的,当内存够用时,不再回收空进程.如果空进程回收完毕后,内存还是不够用时,继续向上一个一个的回收后台进程.依次类推.
当系统内存不够用时,需要回收服务进程时,当系统内存又够用时,会重新启动服务.当用户去手动的把服务关闭时,服务不会再重启了
3.3作用
由于ANR对Activity和BroadcastReceiver响应时间的限制(Activity对事件响应不超过5秒,BroadcastReceiver执行不超过10秒),使得在其中都不适合执行较耗时操作,这样像网络、数据库、复杂计算这类耗时操作的执行就需要一个组件来承担。
Service作为Android四大组件之一,其功能之一就是耗时操作的执行,主要功能如下:
a.执行需要长时间运行的操作,这个操作不与用户进行交互,如网络下载、大文件I/O、复杂计算、监听手机状态。
b.应用内或应用间数据通信,Android每个应用程序都在自己的dalvik虚拟机中运行,一个应用是不允许访问其他应用的内存信息的,为此Android引入了ContentProvider在不同应用间共享数据,BroadcastReceiver广播信息给不同应用程序,但ContentProvider更多用于数据的共享,BroadcastReceiver广播的信息会被所有应用接收较耗费系统资源,对于两个应用间动态的进行交互还需要通过Service来完成。
3.4启动方式
3.4.1直接启动
Activity开启完服务后就不管服务了.Activity和服务没有关系.startService开启的服务,
只有stopService可以关闭
3.4.2绑定启动
绑定服务,生命周期方法会执行:
onUnbind->
onDestory服务销毁了.
在activity中调用service中的方法.
步骤:
调用bindService方法绑定服务
1.在Activity中定义一个连接桥的内部类,会在bindService方法传递给service.
2.在service服务中onBind方法中返回一个IBinder接口对象.
3.在service类中定义一个IBinder的内部实现类,在onBind方法返回.
4.当onBinder方法返回完对象后,activity中连接桥里的onServic