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]来处理多线程和界面交互的问题。这个我后面会讲一些,最近因为这些东西头已经很大了,等我理清思绪再跟大家分享。 


你可能感兴趣的:(android)