Android面试题(一)

1、 Android dvm的进程和Linux的进程, 应用程序的进程是否为同一个概念

DVM指dalivk的虚拟机。每一个Android应用程序都在它自己的进程中运行,都拥有一个独立的Dalvik虚拟机实例。而每一个DVM都是在Linux 中的一个进程,所以说可以认为是同一个概念。

2、 android中的动画有哪几类,它们的特点和区别是什么?

两种,一种是Tween动画、还有一种是Frame动画。Tween动画,这种实现方式可以使视图组件移动、放大、缩小以及产生透明度的变化;另一种Frame动画,传统的动画方法,通过顺序的播放排列好的图片来实现,类似电影。

3、handler机制的原理

andriod提供了 Handler 和 Looper 来满足线程间的通信。Handler 先进先出原则。Looper类用来管理特定线程内对象之间的消息交换(Message Exchange)

1Looper: 一个线程可以产生一个Looper对象,由它来管理此线程里的Message Queue(消息队列)

2Handler: 你可以构造Handler对象来与Looper沟通,以便push新消息到Message Queue里;或者接收LooperMessage Queue取出)所送来的消息。

3) Message Queue(消息队列):用来存放线程放入的消息。

4)线程:UI thread 通常就是main thread,而Android启动程序时会替它建立一个Message Queue

8、说说mvc模式的原理,它在android中的运用

MVC(Model_view_contraller)”模型_视图_控制器。 MVC应用程序总是由这三个部分组成。Event(事件)导致Controller改变ModelView,或者同时改变两者。只要 Controller改变了Models的数据或者属性,所有依赖的View都会自动更新。类似的,只要Controller改变了ViewView会 从潜在的Model中获取数据来刷新自己。

1. View的刷新: 
在需要刷新的地方,使用handle.sendmessage发送信息,然后在handle的getmessage里面执行invaliate或者postinvaliate. 
2. GC内存泄露 
出现情况: 
1.数据库的cursor没有关闭 
2.构造adapter时,没有使用缓存contentview 
   衍生listview的优化问题-----减少创建view的对象,充分使用contentview,可以使用一静态类来优化处理getview的过程/ 
3.Bitmap对象不使用时采用recycle()释放内存 
4.activity中的对象的生命周期大于activity 
调试方法: DDMS==> HEAPSZIE==>dataobject==>[Total Size] 
还有其他问题,大家欢迎提出阿,可以是整体架构的,还有这个Hal层. 


言归正传,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 {     protected void onCreate(Bundle savedInstanceState);     protected void onStart();     protected void onResume();     protected void onPause();     protected void onStop();     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) 

   onPause:     到这一步是可见但不可交互 的,系统会停止动画 等消耗CPU 的事情 
                    从上文的描述已经知道,应该在这里保存你的一些数据,因为这个时候 
                    你的程序的优先级降低,有可能被系统收回。在这里保存的数据,应该在 

                    onResume里读出来,注意:这个方法里做的事情时间要短,因为下一 
                    个activity不会等到这个方法完成才启动 

   onstop:     变得不可见 ,被下一个activity覆盖了 

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

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


转载于:https://www.cnblogs.com/liuzenglong/archive/2011/10/22/2221008.html

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/news/297938.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

将.net framework 4 部署在docker中的全过程(支持4.0 到 4.8,3.5应该也可以)

前言:docker自从诞生之初,就是运行在linux系统中,后来windows上也可以运行docker了,但是微软是通过自身的hyper-v技术,在你的windows系统中虚拟出来了一个小的linux虚拟主机,在它上面跑了个docker环境让你用…

hdu 4049 Tourism Planning [ 状压dp ]

传送门 Tourism Planning Time Limit: 2000/1000 MS (Java/Others) Memory Limit: 32768/32768 K (Java/Others)Total Submission(s): 1115 Accepted Submission(s): 482 Problem DescriptionSeveral friends are planning to take tourism during the next holiday. The…

nginx+PHP+PHP-FPM(FastCGI)在Ubuntu上的安装和配置

nginxPHPPHP-FPM(FastCGI)在Ubuntu上的安装和配置0 之前知识回顾: 1) 目前各种服务器HTTP Server对PHP的支持一共有三种: a.通过HTTPServer内置的模块来实现,例如Apache的mod_php5,类似的Apache内置的mod_perl可以对perl支持&…

有图有真相!这世界上,竟有人跟你长得一模一样!

全世界只有3.14 % 的人关注了爆炸吧知识你相信这个世界上有和你长得一模一样的人吗?我本来不信的看到这个摄影师的作品后真!香!冥冥之中,在平行宇宙在地球的另一端真的有另外一个你和你长得一模一样在生活,在呼吸老牌人…

python双除_python2和python3 中的除法的区别

1. python2中有/和//的除法区别:其中/的用法:>>>1/20即一个整数(无小数部分的数)被另外一个整数除,计算结果的小数部分被截除了,只留下了整数部分有时候,这个功能比较有用,譬如在做一些需要取位数…

两条线段的夹角 cesium_《原本》命题1.10 一条线段可以被分成两条相等的线段

命题1.10一条线段可以被分成两条相等的线段设:AB为一条直线。求作:平分为两条相等的线段。作等边三角形ABC(命题1.1)命题1.1已知一条线段可作一个等边三角形。作∠ACB的角平分线CD(命题1.9)命题1.9一个角可以切分成两个相等的角。那么:D 点就…

有关的命令linux,Linux与用户有关的命令

passwd命令passwd 命令用来修改您的密码。语法:语法是passwd [命令开关]命令开关:-a显示密码属性的所有项目。-l锁住密码。-d删除用户密码, 登录时将不是提示密码。-f强制用户在下次登录时候更改密码。示例:passwd直接输入 passwd 目录的时候允许您更改密码。 在输入…

Minimal API Todo Sample

Minimal API Todo SampleIntro.NET 6 Preview 4 开始引入了 Minimal API 到如今的 RC1,Minimal API 也完善了许多并且修复了很多BUG,之前也写过文章介绍,可以参考:ASP.NET Core 6 Minimal API ,不过只是写了一个 Hello World, 最早…

WPF基础到企业应用系列7——深入剖析依赖属性(三)

八. 只读依赖属性 我们以前在对简单属性的封装中,经常会对那些希望暴露给外界只读操作的字段封装成只读属性,同样在WPF中也提供了只读属性的概念,如一些 WPF控件的依赖属性是只读的,它们经常用于报告控件的状态和信息,…

Web的结构组件

位于Web浏览器与Web服务器之间还有一些用于帮助他们进行事物处理的应用程序,如下所示。 代理 代理位于客户端和服务器之间,接受所有客户端的HTTP请求,并将这些请求转发给服务器。 缓存 Web缓存或代理缓存是一种特殊HTTP代理服务器&#xff0c…

从没想过从上帝视角看地球,竟美得如此震撼!

全世界只有3.14 % 的人关注了爆炸吧知识“ 当你从另一个角度俯瞰地球,你就能发现不一样的世界 。。。试想你现在飘起来了飘得越来越高,地球在你眼里慢慢变小现在,你看见的是此生从未见过的景色——《极简宇宙史》当想象力带我走向未知脑海…

双目三维重建_【光电视界】简单介绍双目视觉三维重构

今日光电有人说,20世纪是电的世纪,21世纪是光的世纪;知光解电,再小的个体都可以被赋能。欢迎来到今日光电!----与智者为伍 为创新赋能----1、三维重构1.1、三维重构到底是什么?首先要了解立体匹配算法&…

交换网络中的sniffer讨论-基于交换网络的ARP spoofing sniffer

交换网络中的sniffer讨论->基于交换网络的ARP spoofing sniffer 转自--http://blog.csdn.net/zhangnn5/article/details/6810347 在阅读这篇文章之前,我假设你已经知道TCP/IP协议,ARP协议,知道什么是sniffer等基本网络知识。在一般的局域网…

mendelay为什么安装不了_你为什么消防验收过不了?消防管道安装错误图集

来源:水电工论坛如有侵权,请联系删除消防管道安装如果一次没做好,验收不通过的话重新返工将对工程进度造成很大的影响,所以在施工时一定要注意以下的错误一定不能出现。2个沟槽卡箍间管段未设置支架立管角钢支架安装时应平面朝上管…

.NET 6 中的HTTP 3支持

dotnet团队官方博客发布了一篇HTTP3的文章:HTTP/3 support in .NET 6:https://devblogs.microsoft.com/dotnet/http-3-support-in-dotnet-6/。文章介绍了.NET 6 将预览支持HTTP3,.NET 7正式支持HTTP3,原因主要是HTTP/3 的 RFC 尚未…

JavaScript数组sort方法(数组排序)

数组对象的sort方法可以按照一定的顺序把数组元素重新排列起来。通常情况下&#xff0c;都是按照字母顺序排列的。JavaScript代码 <script type"text/javascript"> var arr ["HTML","CSS","JavaScript","DOM"]…

Lock与synchronized 的区别

2019独角兽企业重金招聘Python工程师标准>>> 多次思考过这个问题&#xff0c;都没有形成理论&#xff0c;今天有时间了&#xff0c;我把他总结出来&#xff0c;希望对大家有所帮助 1、ReentrantLock 拥有Synchronized相同的并发性和内存语义&#xff0c;此外还多了 …

python从入门到实践django_Django入门——《Python编程从入门到实践》

Django是一个Web框架——一套用于帮助开发交互式网站的工具。Django能够响应网页请求&#xff0c;还能让你更轻松地读写数据库、管理用户等。1、建立项目开始编写一个名为“学习笔记”的Web应用程序&#xff0c;让用户能够记录感兴趣的主题&#xff0c;并在学习每个主题的过程中…

linux 内核 三天吐血,编译安装——吐血经验,内附脚本

程序包编译安装&#xff1a;源码包&#xff1a;name-VERSION-release.src.rpmrpm由源码包安装后&#xff0c;使用rpmbuild命令制作成二进制格式的rpm包&#xff0c;而后再安装源代码–> 预处理–> 编译(gcc)–> 汇编–> 链接–> 执行源代码组织格式&#xff1a;…

mac编辑器coda使用小贴条

前言&#xff1a;最近用mac开发环境了&#xff0c;自然一天到晚用coda&#xff0c;可总是有不顺的地方&#xff0c;搜到这篇文章感觉像看到了知音人&#xff0c;实在是解决了我不少疑难问题啊。外文针对的coda版本较低&#xff0c;我总结的针对版本是version1.7.3 coda快捷键操…