安卓面试精华(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();
意思就是你先让他停止,然后就让它不可见,这样就可以销毁了,然后在重新创建,接着就是回去焦点,获取到之后就显示出来。
- 当你设置了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上很常见。
- protected void onSaveInstanceState(Bundle outState) {
- super.onSaveInstanceState(outState);
- outState.putLong("id", 1234567890);
- }
7.Q:如何退出程序?
A:你看我们要是每次退出程序都是 一个一个页面摁下来,界面一朵用户体验就不好了,我们退出可以有两种常用的方法:
- 我们通过抛异常,然后把这个异常的线程杀死的方法,也就是在异常捕获的代码中写android.os.Process.killProcess(android.os.Process.myPid());这样子就能实现介绍程序而不会出现强制退出的界面。
- 第二种就是新建定义一个App类,里面 整个应用程序的界面,在每一个Activity执行onCreate方法的时候,就把创建的Activity加入到全局的Activity集合里面,然后在你点击退出的里面把Activity一个个从集合里面移除就行了。具体实现如下:
a) 我们需要写一个MyApplication.java类
- public class MyApplication extends Application {
- public List<Activity> activities;
- @Override
- public void onCreate() {
- super.onCreate();
- activities = new ArrayList<Activity>();
- }
- }
然后在每一个OnCreate里面添加activity
- @Override
- protected void onCreate(Bundle savedInstanceState) {
- super.onCreate(savedInstanceState);
- MyApplication myApplication = new MyApplication();
- myApplication.activities.add(this);
- }
接下来就是在要实现退出的地方移除所有Activity:
- for(Activity activity: lists)
- {
- activity.finish();
- }
今天不早了,总结了几个消息,希望能对大家有帮助,明天继续。
安卓面试精华(Activity部分)的更多相关文章
- Linux运维跳槽必备的40道面试精华题(转)
Linux运维跳槽必备的40道面试精华题(转) 下面是一名资深Linux运维求职数十家公司总结的Linux运维面试精华,助力大家年后跳槽找个高薪好工作. 1.什么是运维?什么是游戏运维? 1)运维 ...
- Linux运维跳槽40道面试精华题
Linux运维跳槽40道面试精华题 运维派 3天前 1.什么是运维?什么是游戏运维? 1)运维是指大型组织已经建立好的网络软硬件的维护,就是要保证业务的上线与运作的正常,在他运转的过程中,对他进行维护 ...
- Linux运维跳槽必备的40道面试精华题
过一次年,结婚.存款.父母养老,一系列向钱看的事都在碾压我们本来还挺简单的神经,但难过没有出路,唯有找到好的方法和事业方向,才能实现一步一个脚印的逆袭. 下面是一名资深Linux运维求职数十家公司总结 ...
- linux运维面试精华题
Linux运维跳槽面试精华题|第一集 1.什么是运维?什么是游戏运维? 1)运维是指大型组织已经建立好的网络软硬件的维护,就是要保证业务的上线与运作的正常,在他运转的过程中,对他进行维护,他集合了网络 ...
- 安卓学习笔记---Activity
由于学期实训的要求,我开始学习安卓了.从本月一号开始,学了五天了.时间短,刚学到的东西容易忘,我记一下笔记. 首先是对Activity的理解.activity首先是一个java类,我们创建一个新的ac ...
- Android 面试精华题目总结
转载请标明出处:http://blog.csdn.net/lmj623565791/article/details/24015867 下面的题目都是楼主在android交流群大家面试时遇到的,如果大家 ...
- 面试 -- 关于Activity的相关知识
本篇文章就是记录关于简单的Activity中的问题 问题一:当Activity中存在两个注册的Activity都是主界面的话,应用程序会报错吗?如果不报错,会把那个Activity当做主界面执行 &l ...
- Android基础相关面试问题-activity面试问题(生命周期,任务栈,启动模式,跳转协议,启动流程)
关于Android的一些面试题在15年就已经开了这个专栏了,但是一直木有坚持收集,而每次面对想要跳槽时大脑一片空白,也有些恐惧,因为毕境面试都是纯技术的沟通,要想让公司对你的技术能有所认可会全方位的进 ...
- 安卓开发之activity详解(sumzom)
app中,一个activity通常是指的一个单独的屏幕,相当于网站里面的一个网页,它是对用户可见的,它上面可以显示一些控件,并且可以监听处理用户的时间做出响应. 那么activity之间如何进行通信呢 ...
随机推荐
- JS拖动DIV布局
方法一: <!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3 ...
- .net MVC 使用 JSON JavaScriptSerializer 进行序列化或反序列化时出错,字符串的长度超过了为 maxJsonLength 属性设置的值
在.net mvc的controller中,方法返回JsonResult,一般我们这么写: [HttpPost] public JsonResult QueryFeature(string url, ...
- python概要
python与r语言接口Rpy,统计 科学计算,数值拟合:numpy,scipy 可视化2d:matplotlib,Pylab 可视化3d:mayaviz 复杂网络:networkx 交互终端: bs ...
- rac 实例被莫名重启的案例分析
详见原文博客链接地址: Rac 实例被莫名重启一列分析
- 《C++游戏开发》十八 角色在障碍物中智能行走的实现
本系列文章由七十一雾央编写,转载请注明出处. http://blog.csdn.net/u011371356/article/details/11621337 作者:七十一雾央 新浪微博:http: ...
- CentOS 64位上编译 Hadoop 2.6.0
Hadoop不提供64位编译好的版本号,仅仅能用源代码自行编译64位版本号. 学习一项技术从安装開始.学习hadoop要从编译開始. 1.操作系统编译环境 yum install cmake lzo- ...
- 【JavaScript】history.back() 网页已过期
使用history.back()进行返回时,有时会提示“网页已过期”, 多数是因为目标页面的form为post提交方式,而且是表单已经提交后的响应页面,无法找到form中的具体参数,而“报错”. 具体 ...
- Automatic Preferred Max Layout Width is not available on iOS versions prior to 8.0
今天在真机调试低版本系统的时候出现如题类似Layout Max Width在ios 8 之前不适用的问题, 初步估计是autolayout 所导致的 查找资料解决方法如下: 将label下Preffe ...
- eclipse the user operation is waiting for building workspace" to complete
"the user operation is waiting for building workspace" to complete", 解决办法: 1.选择菜单栏的“P ...
- rotatelogs分割apache日志文件
rotatelogs 截断日志,进行配置.但是保存httpd.conf 之后,服务器报错: 日志文件: piped log program ' /usr/sbin/rotatelogs logs/py ...