9512.net
甜梦文库
当前位置:首页 >> >>

讲一下你对Activity的了解(面试必问的)



的了解(面试必问的 面试必问的). 讲一下你对 Activity 的了解 面试必问的

一 二 三 四

Activity 的生命周期 让 Activity 变成一个窗口:Activity 属性设定 你后台的 Activity 被系统 回收怎么办:onSaveInstanceState 调用与被调用:我们的通信使者 - Intent

/>
一 Activity 的生命周期

和其他手机 平台 的应用 程序 一样,Android 的应用程序 的生命周期是被统一掌控 的,也 就是说我们写的应用程序命运掌握在别人 (系统) 的手里, 我们不能改变它, 只能学习 并 适应它。 简单地说一下为什么是这样:我们手机在运行 一个应用程序的时候,有可能打进来电话 发进来短信 ,或者没有电了,这时候程序都会被中断,优先去服务电话的基本功能 , 另 外系统也不允许你占用太多资源 ,至少要保证电话功能吧,所以资源不足的时候也就有 可 能被干掉。 言归正传,Activity 的基本生命周期如下代码 所示: Java 代码

public class MyActivity extends Activity { protected void onCreate(Bundle savedInstanceState); protected void onStart(); protected void onResume(); protected void onPause(); protected void onStop();

protected void onDestroy(); } public class MyActivity extends Activity { savedInstanceState); protected void onStart(); protected void onPause(); protected void onStop(); protected void onCreate(Bundle protected void onResume(); protected void onDestroy(); }

你自己写的 Activity 会按需要 重载这些方法,onCreate 是免不了的,在一个 Activity 正 常启动的过程中,他们被调用的顺序是 onCreate -> onStart -> onResume, 在 Activity 被干掉 的时候顺序是 onPause -> onStop -> onDestroy ,这样就是一个完整的生命周期,但是有人问 了 ,程序正运行着呢来电话了,这个程序咋办?中止了呗,如果中止的时候新出的一个 Activity 是全屏的那么:onPause->onStop ,恢复的时候 onStart->onResume ,如果打断 这 个应用程序的是一个 Theme 为 Translucent 或者 Dialog 的 Activity 那么只是 onPause ,恢复 的时候 onResume 。 详细介绍一下这几个方法中系统在做什么以及我们应该做什么: onCreate: onStart: onResume: 在这里创建界面 ,做一些数据 的初始化工作 到这一步变成用户可见不可交互 的 变成和用户可交互 的, (在 activity 栈系统通过栈的方式管理这些个 Activity 的最上面,运行完弹出栈,则回到上一个 Activity) 到这一步是可见但不可交互 的,系统会停止动画 等消耗 CPU 的事情 从上文的描述已经知道,应该在这里保存你的一些数据,因为这个时 你的程序的优先级降低,有可能被系统收回。在这里保存的数据,应 该在 onResume 里读出来,注意:这个方法里做的事情时间要短,因为下 一 个 activity 不会等到这个方法完成才启动 onstop: 变得不可见 ,被下一个 activity 覆盖了

onPause: 候

onDestroy: 这是 activity 被干掉前最后一个被调用方法了,可能是外面类调用 finish 方 法或者是系统为了节省空间将它暂时性的干掉, 可以用 isFinishing() 来判 断它,如果你有一个 Progress Dialog 在线程中转动,请在 onDestroy 里 把他 cancel 掉,不然等线程结束的时候,调用 Dialog 的 cancel 方法 会抛

异常的。

onPause,onstop, onDestroy,三种状态 下 activity 都有可能被系统干掉 为了保证程序的正确性,你要在 onPause()里写上持久层操作的代码,将用户编辑的内容都 保存到存储介质上 (一般都是数据库 ) 实际工作中因为生命周期的变化而带来的问题也很 。 多,比如你的应用程序起了新的线程在跑,这时候中断了,你还要去维护那个线程,是暂停 还是杀掉还是数据回滚,是吧?因为 Activity 可能被杀掉,所以线程中使用的变量和一些界 面元素就千万要注意了, 一般我都是采用 Android 的消息机制 [Handler,Message]来处理多线 程和界面交互的问题。这个我后面会讲一些,最近因为这些东西头已经很大了,等我理清思 绪再跟大家分享。 二 让 Activity 变成一个窗口:Activity 属性设定 讲点轻松的吧,可能有人希望做出来的应用程序是一个漂浮在手机主界面的东西, 那么很 简单你只需要设置 一下 Activity 的主题就可以了在 AndroidManifest.xml 中定义 Activity 的 地方一句话:

Xml 代码

android :theme="@android:style/Theme.Dialog" android:theme="@android:style/Theme.Dialog"

这就使你的应用程序变成对话框的形式弹出来了,或者

Xml 代码

android:theme="@android:style/Theme.Translucent" android:theme="@android:style/Theme.Translucent" 就变成半透明的,[友情提示-.-]类似的这种 activity 的属性可以在 android.R.styleable 类的 AndroidManifestActivity 方法中看到,AndroidManifest.xml 中所有元素的属性的介绍都可以 参考这个类 android.R.styleable 上 面 说 的 是 属 性 名 称 , 具 体 有 什 么 值 是 在 android.R.style 中 可 以 看 到 , 比 如 这 个 "@android:style/Theme.Dialog" 就对应于 android.R.style.Theme_Dialog ,('_'换成'.' <--注意: 这个是文章内容不是笑脸)就可以用在描述文件 中了,找找类定义和描述文件中的对应关系

就都明白了。

三 你后台的 Activity 被系统回收怎么办:onSaveInstanceState 当你的程序中某一个 Activity A 在运行时中,主动或被动地运行另一个新的 Activity B 这个时候 A 会执行 Java 代码

public void onSaveInstanceState(Bundle outState) { super.onSaveInstanceState(outState); outState.putLong("id", 1234567890); } public void onSaveInstanceState(Bundle outState) { outState.putLong("id", 1234567890);} super.onSaveInstanceState(outState);

B 完成以后又会来找 A, 这个时候就有两种情况,一种是 A 被回收,一种是没有被回收, 被回 收的 A 就要重新调用 onCreate()方法,不同于直接启动的是这回 onCreate()里是带上参数 savedInstanceState,没被收回的就还是 onResume 就好了。 savedInstanceState 是一个 Bundle 对象,你基本上可以把他理解为系统帮你维护的一个 Map 对象。在 onCreate()里你可能会用到它,如果正常启动 onCreate 就不会有它,所以用的时候 要判断一下是否为空。 Java 代码

if(savedInstanceState != null){ long id = savedInstanceState.getLong("id"); } if(savedInstanceState != null){ long id = savedInstanceState.getLong("id");}

就像官方的 Notepad 教程 里的情况,你正在编辑某一个 note,突然被中断,那么就把这个 note 的 id 记住,再起来的时候就可以根据这个 id 去把那个 note 取出来,程序就完整一些。 这也是看你的应用需不需要保存什么, 比如你的界面就是读取一个列表, 那就不需要特殊记 住什么,哦, 没准你需要记住滚动条的位置...

四 调用与被调用:我们的通信使者 Intent 要说 Intent 了,Intent 就是这个这个意图 ,应用程序间 Intent 进行交流,打个电话啦,来个 电话啦都会发 Intent, 这个是 Android 架构的松耦合的精髓部分,大大提高了组件的复用性, 比如你要在你的应用程序中点击按钮,给某人打电话,很简单啊,看下代码先: Java 代码

Intent intent = new Intent(); intent.setAction(Intent.ACTION_CALL); intent.setData(Uri.parse("tel:" + number)); startActivity(intent); Intent intent = new Intent(); intent.setAction(Intent.ACTION_CALL); intent.setData(Uri.parse("tel:" + number)); startActivity(intent); 扔出这样一个意图,系统看到了你的意图就唤醒了电话拨号程序,打出来电话。什么读联系 人,发短信啊,邮件啊,统统只需要扔出 intent 就好了,这个部分设计 地确实很好啊。 那 Intent 通过什么来告诉系统需要谁来接受他呢? 通常使用 Intent 有两种方法,第一种是直接说明需要哪一个类来接收代码如下: Java 代码

Intent intent = new Intent(this, MyActivity.class); intent.getExtras().putString("id", "1"); tartActivity(intent); Intent intent = new "1");tartActivity(intent); Intent(this, MyActivity.class);intent.getExtras().putString("id",

第一种方式很明显,直接指定了 MyActivity 为接受者,并且传了一些数据给 MyActivity,在 MyActivity 里可以用 getIntent()来的到这个 intent 和数据。 第二种就需要先看一下 AndroidMenifest 中的 intentfilter 的配置了 Xml 代码

<intent-filter>

<action android:name="android.intent.action.VIEW" /> <action android:value="android.intent.action.EDIT" /> <action android:value="android.intent.action.PICK" /> <category android:name="android.intent.category.DEFAULT" /> <data android:mimeType="vnd.android.cursor.dir/vnd.google.note" /> </intent-filter> <intent-filter> <action android:name="android.intent.action.VIEW" /> <action android:value="android.intent.action.EDIT" /> <action android:value="android.intent.action.PICK" /> <category android:name="android.intent.category.DEFAULT" /> <data android:mimeType="vnd.android.cursor.dir/vnd.google.note" /></intent-filter> 这里面配置用到 了 action, data, category 这些东西,那么聪明的你一定想到 intent 里也会有这些东西,然后一 匹配不就找到接收者了吗? action 其实就是一个意图的字符串名称。 上面这段 intent-filter 的配置文件说明了这个 Activity 可以接受不同的 Action, 当然相应的程 序逻辑也不一样咯,提一下那个 mimeType,他是在 ContentProvider 里定义的,你要是自己实 现一个 ContentProvider 就知道了,必须指定 mimeType 才能让数据被别人使用。 不知道原理说明白没,总结一句,就是你调用别的界面不是直接 new 那个界面,而是通过 扔出一个 intent,让系统帮你去调用那个界面,这样就多么松藕合啊,而且符合了生命周期 被系统管理的原则。 想知道 category 都有啥,Android 为你预先定制好的 action 都有啥等等,请亲自访问官方链 接 Intent ps:想知道怎么调用系统应用程序的同学,可以仔细看一下你的 logcat,每次运行一个程序的 时候是不是有一些信息比如: Starting activity: Intent { action=android.intent.action.MAINcategories={android.intent.category.LAUNCHER} flags=0x10200000comp={com.android.camera/com.android.camera.GalleryPicker} } 再对照一下 Intent 的一些 set 方法,就知道怎么调用咯,希望你喜欢: )



更多相关文章:
面试必问10类经典问题
面试必问 10 类经典问题 问题一:请做一下自我介绍...有助于你将工作做的 更好;4、讲述一个你没有...你的地方是什么;4、你对本公司了解多少; 5、你...
经典面试问题回答思路之“请你自我介绍一下
经典面试问题回答思路之“请你自我介绍一下面试过程中, 面试官会向应聘者发问, 而应聘者的回答将成为面试官考虑是否接受他的 重要依据。对应聘者而言,了解这些...
安卓面试问答题
安卓面试问答题_幼儿读物_幼儿教育_教育专区。二、...答案: 一般情况比如有两个 activity,分别叫 A,B...对于一个 Intent 对象,消息“目的地” 是必须的,...
面试必问(2013)
面试必问(2013)_求职/面试_求职/职场_应用文书。...要领:1、如“谁都不崇拜、崇拜自己或一个虚幻的...了解应聘者对失败经历的原因分晰能力; 2、是否从...
这几道题银行面试必问,你怎么回答?
这几道题银行面试必问,你怎么回答?银行校园招聘面试是最后一关,如何在面试中脱颖而出呢?对考生来最为关键,也可 以是“成败在此一搏”。纵观以往面试,...
实习面试必问的5个问题
你问这个问题是想了解面试官对你感兴趣的程度, 以及得到一些反 馈,Cole 解释...你表现出自己缜密、有帮助的一面,并 且有确保不漏下任何机会的意愿,Cole ...
移动公司面试问题及参考答案
应聘者的性格、 观念、心态,这是招聘单位问该问题...要说自己仅限于读书、听音乐、上网,否则可能令面试...4、 你对移动公司的了解有多少。回答参考 :这一个...
面试问题提纲一(十大面试问题)
面试问题提纲一(十大面试问题)_求职/面试_求职/职场...请举例 善待冲突: 第九题 明你的观点; 其它...目前一半的薪酬挖你,在决定跳槽之前,你会向他问哪...
面试必问的面试
面试必问的面试题本文来自:HiAll 求职社区 作者:...1、请你自我介绍一下? 1)这是面试的必考题目。2...1)况对于了解应聘者的性格、观念、心态等有一定的...
这些面试问题,原来是面试官最想了解的!
问题一:你为什么会来我们公司应聘?面试官问这个问题就是想知道你在上一家公司...你的职业规划、你对这家公司以及应聘岗位的了解; 回答一: 这个时候不能因为...
更多相关标签:
activity 面试题    activity 面试    面试需要了解公司什么    面试问对公司的了解    面试时需要了解的问题    面试对公司的了解    面试时问对公司的了解    面试官问对公司的了解    

All rights reserved Powered by 甜梦文库 9512.net

copyright ©right 2010-2021。
甜梦文库内容来自网络,如有侵犯请联系客服。zhit325@126.com|网站地图