安卓面试精华(Activity部分)

过几天小弟要去面试了,当然免不了要好好复习下功课,其实很多东西也不是特别清楚,今天都当作一个回顾和巩固,希望我的这篇文章能对即将去找工作的同学有所帮助。

1.

Q:什么是activity?

虽然这个问题现在不流行问了,但是还是做好准备,有备无患嘛。

A:

1).activity是四大组件之一,一般情况下,一个和用户交互的界面就对应有一个activity。

2).Activity是Context的子类,同时它实现了Window.callback和keyEvent.callback,正因为如此,人们才能够实现与界面交互。比如我们熟悉的点击事件Button.setOnClickListener{}

3).我开发常用的activity有listActivity(数据展示的),TabActivity(制作表格),PreferenceActivity(常用来写设置界面),有时候一些Activity都有一些共同的特点或者相同功能的时候,我会自己定义一个BaseActivity。

2.

Q:请说说Activity的生命周期?这个问题问得还挺多的)。

A:我们三步走:

第一步,解释:

生命周期描述的是一个类从创建到消亡中会执行的方法,(注意,市讲的时一个个会执行的方法),在这个过程中,会针对不同的生命阶段调用不同的方法。其实讲白了就是一个个方法的执行过程。

第二步,如何执行:

接下来我们就要说都执行了哪些方法:

Activity从创建到销毁有多种状态,从一种状态到另一种状态会执行相应的方法,包括Oncreate()—创建,OnDestory—销毁;OnStart()---可见,OnStop()—不可见;OnResume—获取焦点,OnPause---失去焦点;这些方法是两两对应,有一个执行了肯定有对应的执行。

这里要注意一点,弹出对话框不会执行以上任何方法,理由是对话框本身就是Activity的一部分。

最后还有一个方法,OnRestart(),这个方法在Activity被onStop后,但是没有被onDestroy,在再次启动此Activity时就调用onRestart(而不再调用onCreate)方法;如果是被销毁了,那就是调用onCreate()方法。

第三步:用自己做过的项目来阐述以上怎么用法。比如说:

客户端每次进入某个界面的时候都要看到最新的数据,这个刷新列表的操作 就放在onStart()的方法里面.在onStart()里面写填充数据的内容就ok了。

做音乐播放器的时候,需要处理来电情况,那就虚报把播放断点保存起来,并把播放声音置位0,这些工作就可以放在OnStop里面做,然后要启动的时候,恢复断点,设置音量这些可以在OnStart里面做。

我们在读文档的时候,会发现onPostResume()和OnPostCreate()这两个生命周期的方法,不过开发的时候没有用到过.

3.

Q:两个Activity之间跳转执行哪些方法?

A:

一般情况比如说有两个activity,分别叫A,B ,当在A里面激活B组件的时候, A 会调用 onPause()方法,然后B 调用onCreate() ,onStart(), OnResume() ,如果B覆盖了A,我们就看不到A了,那A还会调用OnStop方法,但是如果B透明的,还能看到底下的A的话就不会调用OnStop,因为只有不可见才会调用OnStop();

4.

Q说说横竖屏切换时候Activity的生命周期?

A:这个和配置的清单文件有关系。

1.如果不设置Activity的android:configChanges,切换屏幕时候会调用各个生命周期,依次是:

onPause(),onStop(),OnDestory(),onCreate(),OnResume(),onStart();

意思就是你先让他停止,然后就让它不可见,这样就可以销毁了,然后在重新创建,接着就是回去焦点,获取到之后就显示出来。

  1. 当你设置了Activity的android:configChanges="orientation|keyboardHidden"时,切屏不会重新调用各个生命周期,只会执行onConfigurationChanged方法,通常作游戏开发,方向都是写死了的。

5.

如何把Activity设置成窗口样式?

我们只需要在清单文件里面配置,你可以使用Android系统提供的dialog样式,也可以自己在value文件夹下的style.xml自己定义一个样式,然后设置到Activity上。

6.

Q:你后台的Activity被系统回收怎么办?如果后台的Activity由于某原因被系统回收可了,如何在被系统回收之前保存当前状态?

A:我们来看下Activity是怎么存放的:我们很容易看到,越是在栈顶的 不容易被回收,系统会优先回收栈底的activity,要想保存好数据,我们需要复写一个方法:onSaveInstanceState(Bundle outState),相信这个方法大家都不陌生,因为我们写Activity的onCreate()基本都见到了调用这个方法super.onCreate(savedInstanceState);其实这个方法调用就是从保存的数据里面取出来:每次执行oncreate方法都会看Bundle是不是空的,不是就把数据取出来,取数据调用的就是super.onCreate(savedInstanceState);这个东西在应用在保存用户id上很常见。

Java代码

  1. protected void onSaveInstanceState(Bundle outState) {
  2. super.onSaveInstanceState(outState);
  3. outState.putLong("id", 1234567890);
  4. }

7.Q:如何退出程序?

A:你看我们要是每次退出程序都是 一个一个页面摁下来,界面一朵用户体验就不好了,我们退出可以有两种常用的方法:

  1. 我们通过抛异常,然后把这个异常的线程杀死的方法,也就是在异常捕获的代码中写android.os.Process.killProcess(android.os.Process.myPid());这样子就能实现介绍程序而不会出现强制退出的界面。
  2. 第二种就是新建定义一个App类,里面 整个应用程序的界面,在每一个Activity执行onCreate方法的时候,就把创建的Activity加入到全局的Activity集合里面,然后在你点击退出的里面把Activity一个个从集合里面移除就行了。具体实现如下:

a)   我们需要写一个MyApplication.java类

Java代码

  1. public class MyApplication extends Application {
  2. public List<Activity> activities;
  3. @Override
  4. public void onCreate() {
  5. super.onCreate();
  6. activities = new ArrayList<Activity>();
  7. }
  8. }

然后在每一个OnCreate里面添加activity

Java代码

  1. @Override
  2. protected void onCreate(Bundle savedInstanceState) {
  3. super.onCreate(savedInstanceState);
  4. MyApplication myApplication = new MyApplication();
  5. myApplication.activities.add(this);
  6. }

接下来就是在要实现退出的地方移除所有Activity:

Java代码

  1. for(Activity activity: lists)
  2. {
  3. activity.finish();
  4. }

今天不早了,总结了几个消息,希望能对大家有帮助,明天继续。

时间: 2024-08-17 05:51:39

安卓面试精华(Activity部分)的相关文章

安卓面试备考题收集

最近要参加面试,网上找了一些题来备着,大家也来学习学习吧,话说平时还真有些东西不知道... 面试题一:AIDL的全称是什么?如何工作? Android interface definition language (android接口定义语言) , 用来跨进程的访问方法, 像 游戏中调用支付宝接口就是用的这个. 访问远程的服务的方法. 如何工作. 面试题二:Android程序运行时权限与文件系统权限的区别? 程序运行时权限:Android程序执行需要读取到安全敏感项必需在androidmanife

安卓面试易考题(二)

这是延续上一部分的知识,依然是面试题,进入正题: 面试题一:谈谈你对Activity的理解: 这是考官希望你把自己的心得,做项目的时候的体会写出来:我们可以答Activity异常被系统回收的时候怎么处理的,然后可以讲讲Activity的生命周期. 面试题二:Service是否运行在主线程?能否在Service里面执行耗时的操作? 答:service是默认运行在主线程的,很多人觉得是后台服务就觉得应该是在子线程,其实不是,所以我们不能在里面执行耗时的操作,因为会产生ANR异常.我们要做耗时的操作要

安卓 面试经验

韩梦飞沙  韩亚飞  [email protected]  yue31313  han_meng_fei_sha #Alibaba 一面 说一下你怎么学习安卓的? 项目中遇到哪些问题,如何解决的? Android事件分发机制? 三级缓存底层实现? HashMap底层实现,hashCode如何对应bucket? Java的垃圾回收机制,引用计数法两个对象互相引用如何解决? 用过的开源框架的源码分析 Acticity的生命周期,Activity异常退出该如何处理? tcp和udp的区别,tcp如何保

Android面试精华总结

转载请标明出处:http://blog.csdn.net/lmj623565791/article/details/24015867 下面的题目都是楼主在android交流群大家面试时遇到的,如果大家有好的题目或者好的见解欢迎分享,楼主将长期维护此帖. 某公司高级面试题(2015-03-14)[感谢helder分享] 1.详述Android系统架构,包括层与层之间调用.binder.jni.底层文件读写方法 2.描述自己的一个项目,要求画出结构图,UML图,详细描述项目种的技术点,技术难点以及解

【安卓学习笔记1】安卓基本组件Activity,Service,BoradCastReceiver,ContentProvider简介

因为博主以前学习过安卓的一点知识,所以学习笔记和别人不太一样. 博主的学习参考书籍是疯狂android讲义第二版.本系列博客都是记录学习笔记的. 因为博主平时还要上班,所以也就晚上有时间看书,写博客. 博主坚持每天看一个小时的书,记录一下随笔心得. 希望能给大家带来帮助. =========================================================================== 安卓的基本组件 =============================

Android 面试精华题目总结

下面的题目都是楼主在android交流群大家面试时遇到的,如果大家有好的题目或者好的见解欢迎分享,楼主将长期维护此帖. 1.请解释下在单线程模型中Message,Handler,Message Queue,Looper之间的关系. 拿主线程来说,主线程启动时会调用Looper.prepare()方法,会初始化一个Looper,放入Threadlocal中,接着调用Looper.loop()不断遍历Message Queue, Handler的创建依赖与当前线程中的Looper,如果当前线程没有L

安卓学习笔记---Activity

由于学期实训的要求,我开始学习安卓了.从本月一号开始,学了五天了.时间短,刚学到的东西容易忘,我记一下笔记. 首先是对Activity的理解.activity首先是一个java类,我们创建一个新的activity类,得继承Activity,这是android的jar包里的. 我的理解他就是一个控件的容器,就是我们使用手机时看的的一个窗口.本身没有什么实质的内容.       每一个创建的activity都得在AndroidManifest.xml文件中注册一下. 都要重新onCreate方法.

安卓Fragment和Activity之间的数据通讯

Fragment是Android3.0之后才推出来的.可以用来做底部菜单,现在很多APP都有用到这个底部菜单.当然TabHost也可以用来做底部菜单,但是Fragment来做,动画效果这些可以做得更炫. Fragment和Activity之间是可以相互进行参数传送这些.但是Fragment不可以直接就将数据传送到另外一个Fragment,而是借助Activity,先传到Activity,如何再通过Activity传到Fragment.  所以实现Fragment和Activity之间的数据传送是

Android面试精华

SIM卡的EF文件有什么作用? SIM卡里的所有文件按树来组织: 主文件MF(Master File)--主文件只有文件头,里面存放着整个SIM卡的控制和管理信息 专用文件DF(Dedicated File)--也是只有一个文件头, 里面存放着整个目录的管理控制信息, 专用文件相当于一个目录的根. 基本文件EF(Elementary File)--既有文件头,也有文件体, 文件头存放该文件的位置和控制信息, 文件体存放真正的数据, 整个SI M卡中只有基本文件有文件体, 也只有基本文件才用来存放