Android新教材第二章面试题.doc_第1页
Android新教材第二章面试题.doc_第2页
Android新教材第二章面试题.doc_第3页
Android新教材第二章面试题.doc_第4页
Android新教材第二章面试题.doc_第5页
已阅读5页,还剩3页未读 继续免费阅读

下载本文档

版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领

文档简介

第2章Activity与Intent282.1使用Activity282.2Activity的生命周期292.2.1生命周期中的各个方法30l 生命周期中有哪几个方法?答案:onCreate() 、onStart()、onResume()、onPause()、onStop()、onDestroy()、onRestart()。方法描述可被杀死下一个onCreate()在activity第一次被创建的时候调用。这里是你做所有初始化设置的地方创建视图、绑定数据至列表等。如果曾经有状态记录(参阅后述SavingActivityState。),则调用此方法时会传入一个包含着此activity以前状态的包对象做为参数。总继之以onStart()。否onStart()onRestart()在activity停止后,在再次启动之前被调用。总继之以onStart()。否onStart()onStart()当activity正要变得为用户所见时被调用。当activity转向前台时继以onResume(),在activity变为隐藏时继以onStop()。否onResume()oronStop()onResume()在activity开始与用户进行交互之前被调用。此时activity位于堆栈顶部,并接受用户输入。继之以onPause()。否onPause()onPause()当系统将要启动另一个activity时调用。此方法主要用来将未保存的变化进行持久化,停止类似动画这样耗费CPU的动作等。这一切动作应该在短时间内完成,因为下一个activity必须等到此方法返回后才会继续。当activity重新回到前台是继以onResume()。当activity变为用户不可见时继以onStop()。是onResume()oronStop()onStop()当activity不再为用户可见时调用此方法。这可能发生在它被销毁或者另一个activity(可能是现存的或者是新的)回到运行状态并覆盖了它。如果activity再次回到前台跟用户交互则继以onRestart(),如果关闭activity则继以onDestroy()。是onRestart()oronDestroy()onDestroy()在activity销毁前调用。这是activity接收的最后一个调用。这可能发生在activity结束(调用了它的finish()方法)或者因为系统需要空间所以临时的销毁了此acitivity的实例时。你可以用isFinishing()方法来区分这两种情况。是nothingl 横竖屏切换时候activity的生命周期。答案:1.不设置Activity的android:configChanges时,切屏会重新调用各个生命周期,切横屏时会执行一次,切竖屏时会执行两次。2.设置Activity的android:configChanges=orientation时,切屏还是会重新调用各个生命周期,切横、竖屏时只会执行一次。3.设置Activity的android:configChanges=orientation|keyboardHidden时,切屏不会重新调用各个生命周期,只会执行onConfigurationChanged方法。2.2.2Activity的四种基本状态31l Activity的四种基本状态分别是哪些?答案:运行态(Running)、暂停态(Paused)、停止态(Stopped)、终止态(Destroyed)。2.2.3编程测试Activity生命周期312.2.4Activity之间协同的情况35l 假设Activity A启动Activity B,请描述其调用过程。答案:Activity A执行onPause()方法,它失去焦点;Activity B依次执行onCreate()、onStart()和onResume()方法,这时Activity B拥有了焦点;然后,如果Activity A不再被用户可见,它的onStop()方法将被执行。l 请详细请描述一下在Activity的生命周期中各个方法的调用顺序。答案: 初次启动一个Activity时的执行过程是:依次执行了onCreate() 、onStart() 和onResume()方法。 当Activity启动后,点击“返回”按钮,这时Activity的执行顺序是:onPause() - onStop() - onDestroy()。 启动一个Activity时的执行过程是:依次执行了onCreate() 、onStart() 和onResume()方法。 在Activity被启动之后,点击Home按钮,这时Activity的执行顺序是:onPause() - onStop()。 点击Home按钮后,系统回到桌面,然后我们再找到这个应用并打开,这时Activity的执行顺序是:onRestart() - onStart() - onResume()。 重新启动一个应用,在它被启动后,先点击“拨打电话”按钮,之后再点击“返回”按钮,这时Activity的执行顺序是:onPause() - onStop() - onRestart() - onStart() - onResume()。2.3Activity的启动与关闭352.3.1直接启动Activity352.3.2带返回值启动Activity352.3.3关闭Activity39l 请结合文字和代码来详细描述Activity的两种启动方式。答案:直接启动:首先声明一个Intent对象用来指定启动源和启动目标,接着如果需要则在其中封装一些数据,然后使用startActivity(Intent)方法将这个Intent对象传入,即可完成Activity的启动。关键代码段如下:Intent intent = new Intent(this, NewActivity.class);this.startActivity(intent);如果想启动多个Activity,则使用startActivities(Intent)即可。带返回值的启动:这种方式使用startActivityForResult(Intent intent, int requestCode)方法来实现,并在原Activity中重写onActivityResult(int requestCode, int resultCode, Intent data) 方法来获取到返回值,之后通过requestCode和resultCode两个参数匹配到相应的Activity,然后就可以通过data参数处理返回信息了。l 4种activity的启动模式。答案:standard:标准模式,一调用startActivity()方法就会产生一个新的实例。singleTop:如果已经有一个实例位于Activity栈的顶部时,就不产生新的实例,而只是调用Activity中的newInstance()方法。如果不位于栈顶,会产生一个新的实例。singleTask:会在一个新的task中产生这个实例,以后每次调用都会使用这个,不会去产生新的实例了。singleInstance:这个跟singleTask基本上是一样,只有一个区别:在这个模式下的Activity实例所处的task中,只能有这个activity实例,不能有其他的实例。l 如何退出Activity。答案:对于单一Activity的应用来说,退出很简单,直接finish()即可。当然,也可以用killProcess()和System.exit()这样的方法。现提供几个方法,供参考:1、抛异常强制退出:该方法通过抛异常,使程序ForceClose。验证可以,但是,需要解决的问题是,如何使程序结束掉,而不弹出ForceClose的窗口。2、记录打开的Activity:每打开一个Activity,就记录下来。在需要退出时,关闭每一个Activity即可。3、发送特定广播:在需要结束应用时,发送一个特定的广播,每个Activity收到广播后,关闭即可。4、递归退出在打开新的Activity时使用startActivityForResult,然后自己加标志,在onActivityResult中处理,递归关闭。除了第一个,都是想办法把每一个Activity都结束掉,间接达到目的。但是这样做同样不完美。你会发现,如果自己的应用程序对每一个Activity都设置了nosensor,在两个Activity结束的间隙,sensor可能有效了。但至少,我们的目的达到了,而且没有影响用户使用。为了编程方便,最好定义一个Activity基类,处理这些共通问题。2.4Activity的管理Task与Back Stack402.4.1Task402.4.2Back Stack40l 在Android系统中,使用什么对Activity进行管理?答案:使用Task(作业)和Back Stack(Activity栈)对Activity进行管理。2.5Activity的其他操作41l 请说出一个Activity的其他操作。答案:改变标题与去掉标题栏、不可见与透明、横竖屏显示。l 如果后台的Activity由于某原因被系统回收了,如何在被系统回收之前保存当前状态?答案:当你的程序中某一个ActivityA在运行时中,主动或被动地运行另一个新的ActivityB这个时候A会执行Java代码publicvoidonSaveInstanceState(BundleoutState)super.onSaveInstanceState(outState);outState.putLong(id,1234567890);B完成以后又会来找A,这个时候就有两种情况,一种是A被回收,一种是没有被回收,被回收的A就要重新调用onCreate()方法,不同于直接启动的是这回onCreate()里是带上参数savedInstanceState,没被收回的就还是onResume就好了。savedInstanceState是一个Bundle对象,你基本上可以把他理解为系统帮你维护的一个Map对象。在onCreate()里你可能会用到它,如果正常启动onCreate就不会有它,所以用的时候要判断一下是否为空。Java代码if(savedInstanceState!=null)longid=savedInstanceState.getLong(id);就像官方的Notepad教程里的情况,你正在编辑某一个note,突然被中断,那么就把这个note的id记住,再起来的时候就可以根据这个id去把那个note取出来,程序就完整一些。这也是看你的应用需不需要保存什么,比如你的界面就是读取一个列表,那就不需要特殊记住什么,哦,没准你需要记住滚动条的位置.2.6使用Intent激活组件42l 三大组件Activity、Service和Broadcast Receiver都是被什么激活的?答案:Intent是一种运行时绑定的消息机制,而三大组件Activity、Service和Broadcast Receiver都是被消息激活的,这种消息就是Intent。2.7Intent对象的属性432.7.1ComponentName(组件名)及显式与隐式Intent432.7.2Action(动作)442.7.3Data(数据)及内置Intent的使用452.7.4Category(分类)462.7.5Extra(额外信息)及Intent数据传递472.7.6Flag(标志)48l 一个Intent对象包括六个属性,请一一列举这六个属性。答案:组件名(Component Name)、动作(Action)、数据(Data)、分类(Category)、额外信息(Extra)和标志(Flags)。l AndroidIntent的使用。答案:在一个Android应用中,主要是由一些组件组成,(Activity,Service,ContentProvider,etc.)在这些组件之间的通讯中,由Intent协助完成。正如网上一些人解析所说,Intent负责对应用中一次操作的动作、动作涉及数据、附加数据进行描述,Android则根据此Intent的描述,负责找到对应的组件,将Intent传递给调用的组件,并完成组件的调用。Intent在这里起着实现调用者与被调用者之间的解耦作用。Intent传递过程中,要找到目标消费者(另一个Activity,IntentReceiver或Service),也就是Intent的响应者,有两种方法来匹配:1、显示匹配(Explicit):javaview plaincopyprint?publicTestBextentsActivity.;publicclassTestextendsActivity.publicvoidswitchActivity()Intenti=newIntent(Test.this,TestB.class);this.startActivity(i);代码简洁明了,执行了switchActivity()函数,就会马上跳转到名为TestB的Activity中。2、隐式匹配(Implicit):隐式匹配,首先要匹配Intent的几项值:Action,Category,Data/Type,Component如果填写了Componet就是上例中的Test.class)这就形成了显示匹配。所以此部分只讲前几种匹配。匹配规则为最大匹配规则,1、如果你填写了Action,如果有一个程序的Manifest.xml中的某一个Activity的IntentFilter段中定义了包含了相同的Action那么这个Intent就与这个目标Action匹配,如果这个Filter段中没有定义Type,Category,那么这个Activity就匹配了。但是如果手机中有两个以上的程序匹配,那么就会弹出一个对话可框来提示说明。Action的值在Android中有很多预定义,如果你想直接转到你自己定义的Intent接收者,你可以在接收者的IntentFilter中加入一个自定义的Action值(同时要设定Category值为ent.category.DEFAULT),在你的Intent中设定该值为Intent的Action,就直接能跳转到你自己的Intent接收者中。因为这个Action在系统中是唯一的。2、data/type,你可以用Uri来做为data,比如Uriuri=Uri.parse();Intenti=newIntent(Intent.ACTION_VIEW,uri);手机的Intent分发过程中,会根据的scheme判断出数据类型type手机的Brower则能匹配它,在Brower的Manifest.xml中的IntenFilter中首先有ACTION_VIEWAction,也能处理http:的type,3、至于分类Category,一般不要去在Intent中设置它,如果你写Intent的接收者,就在Manifest.xml的Activity的IntentFilter中包含android.category.DEFAULT,这样所有不设置Category(Intent.addCategory(Stringc);)的Intent都会与这个Category匹配。4、extras(附加信息),是其它所有附加信息的集合。使用extras可以为组件提供扩展信息,比如,如果要执行“发送电子邮件”这个动作,可以将电子邮件的标题、正文等保存在extras里,传给电子邮件发送组件。转载地址:/itachi85/article/details/74264572.8IntentFilter(Intent过滤器)482.8.1使用IntentFilter492.8.2测试IntentFilter49l 为什么要引入IntentFil

温馨提示

  • 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
  • 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
  • 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
  • 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
  • 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
  • 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
  • 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。

评论

0/150

提交评论