您好,欢迎访问三七文档
当前位置:首页 > 医学/心理学 > 基础医学 > Android 面试基础知识总结
1Activity1.1Activity的概念是Android应用层开发的四大组件之一,主要负责和用户交互部分,有自己的生命周期,在其上可以布置按钮,文本框等各种控件,简单来说就是Android的UI部分。1.2Activity与View的区别1)Activity是四大组件中唯一一个用来和用户进行交互的组件。可以说Activity就是android的视图层。2)如果再细化,Activity相当于视图层中的控制层,是用来控制和管理View的,真正用来显示和处理事件的实际上是View。3)每个Activity内部都有一个Window对象,Window对象包含了一个DecorView(实际上就是FrameLayout),我们通过setContentView给Activity设置显示的View实际上都是加到了DecorView中。1.3Activity生命周期1.3.1生命周期主干方法描述可被杀死下一个onCreate()在Activity第一次被创建的时候被调用。这里是你做所有初始化设置的地方—创建视图、绑定数据至列表等。如果曾经有状态记录(参阅后述SavingActivityState。),则调用此方法时会传入一个包含着此activity以前状态的包对象做为参数否onStart()onStart()在Activity正要变得为用户所见时被调用。数据刷新时候调用!!!当Activity转向前台时接着调用onResume()在Activity变为隐藏时接着知行onStop()否onResume()onStop()onResume()在Activity开始与用户进行交互之前被调用。此时Activity位于堆栈顶部,并接收用户否onPause()输入。Activityrun……Activity开始运行……………………onPasue()当系统将要启动另一个Activity时调用。此方法主要用来将未保存的变化进行持久化,停止类似动画这样耗费CPU的动作等。这一切动作应该在短时间内完成,因为下一个Activity必须等到此方法返回后才会继续。当Activity重新回到前台会执行onResume()【弹出对话框】。当Activity变为用户不可见时会执行onStop()。是onResume()onStop()onStop()当Activity不再为用户可见时调用此方法。这可能发生在它被销毁或者另一个Activity(可能是现存的或者是新的)回到运行状态并覆盖了它。如果Activity再次回到前台跟用户交互则执行onRestart().如果关闭Activity则执行onDestroy()是onRestart()onDestroy()onDestroy()在Activity销毁前调用。这是Activity接收的最后一个调用。这可能发生在Activity结束(调用了它的finish()方法)或因为系统需要空间所以临时的销毁了此Activity的实例时。可以用isFinishing()方法来区分这两种情况。是已经完蛋了,还调用毛线!!!1.3.2其他中转方法onRestart()在Activity停止后,在再次启动之前被调用。之后执行onStart().否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配置样例activityandroid:name=com.example.mobilesafe.WatchDogActivityandroid: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被关闭了。2BroadcastReceiver2.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.耗时的较长的工作最好放在服务中完成3Service3.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中连接桥里的onServiceConnected会备调用,其中形参IBinderservice就是service类中onBind返回的对象.5.activity得到了service中的内部类对象,点击按钮是调用内部类中的forwardBuyTicket方法,此方法会转调服务中buyTicket方法.3.5生命周期Service的生命周期(适用于2.1及以上)1.被startService的无论是否有任何活动绑定到该Service,都在后台运行。onCreate(若需要)-onStart(intid,Bundleargs).多次startService,则onStart调用多次,但不会创建多个Service实例,只需要一次stop。该Service一直后台运行,直到stopService或者自己的stopSelf()或者资源不足由平台结束。2.被bindService的调用bindService绑定,连接建立服务一直
本文标题:Android 面试基础知识总结
链接地址:https://www.777doc.com/doc-5940334 .html