Android基础知识(可能对面试有帮助)

来源:互联网 发布:药家鑫事件知乎 编辑:程序博客网 时间:2024/05/17 10:38
1、Android的四大组件
  1. Activity:提到Activity就要想到它的生命周期,一般一个活动启动的顺序是onCreate()➝onStart()➝onResume();当另外一个活动如B启动的时候,活动A就onPause(),而活动B就onCreate()➝onStart()➝onResume();当返回第一个活动A的时候,活动B就会onPause(),活动A就会onRestart()➝onStart()➝onResume();活动B就onPause()➝onStop()➝onDestory();                         一个Activity的销毁顺序是:onPause()➝onStop()➝onDestory()                                                                                             一般我们这样理解:onCreate():当一个活动启动的时候,需要准备的活动,如布局加载等,就在onCreate()完成;onStrat():当活动即将要跟用户交互的时候被调用。onResume():当活动和用户进行交互的时候,就被调用了。onPause():当活动被迫从前台转到后台的时候会被调用,一般会在这时候保存状态信息。onStop():当活动不在需要被调用的时候,就会调用onStop();onRestart():当活动需要再次被调用到前台的时候,就会被调用;onDestory():当活动被销毁的时候,就会被调用。
  2. Server服务:可以用在许多地方,比如播放多媒体时启动另外一个活动,多媒体还要后台继续播放;又比如后台记录你的位置发生变化。要提到的是,使用Service,需要在配置文件里声明,才可以使用startservice()和bindservice();
  3. Broadcast Receiver广播接收器:(例子:手机来信有广播通知,电量不足有广播)分为两种,一、标准广播,完全异步执行,特点是:广播播出后,所有广播接收器都可以接收,因为他们之间没有顺序,缺点是无法截断。二、有序广播,特点是:广播播出后,同一时刻只有一个广播器能接收,当该广播器处理完后,才会继续传递,可以选择截断,不让下面接收,优先级高的先接收。                                                                                                                                                       广播接收器可以自由地对自己感兴趣的广播进行注册,当有相应的广播发出后,就会接收。他有两种注册方式。一、动态注册,即在代码里注册。创建一个类,让它继承BroadcastReceiver并重写onReceive()方法;二、静态注册,即在配置文件里声明一个权限
  4. Content Provider内容提供者:即对外共享数据,把应用中的数据提供给其他应用,如联系人,图片等数据



2、Android的事件处理机制
     理解Android的事件处理机制对处理一些复杂的嵌套时很有用,比如scrollview里嵌套listview,或者scrollview里嵌套viewpaper这些都会容易产生事件冲突。这里主要讲的就是Touch事件,主要有三个方法:dispatchTouchEvent(MotionEvent ev)—Activity,ViewGroup,View都有此方法【即将事件进行分发到目标控件】、onInterceptTouchEvent(MotionEvent ev)—ViewGroup 【用来过滤事件,进行事件拦截,是否要向下传递事件】、onTouchEvent(MotionEvent  ev)—Activity,ViewGroup,view【最终用来处理事件】一般系统默认帮我们调用了前面两种方法,我们平时都是重写onTouchEvent
     android系统对本事件的处理是一层一层向下传递处理(树形处理),它是一颗UI布局树,最外层布局是整个UI树的根。
     图片配合讲解
    
      讲解:当我们用手机按下屏幕的时候,当前处于onStart()状态的Activity最先收到此Touch事件下的ACTION_DOWN,然后开始调用dispatchTouchEvent()开始进行事件的分发,如果返回true,则Activity不向下分发事件,则整个布局都不会收到DOWN事件,TouchEvent直接到onTouchEvent()事件处理;若返回false,则DOWN事件继续向下分发,此时DOWN事件直接被分发到UI树的根布局(最外层的布局),根布局拿到DOWN事件后,执行自己的dispatchTouchEvent(),如果返回true,则直接交给根布局的onTouchEvent()中进行;若返回false,表示还要继续下发,此时事件被传递到根布局的onInterceptTouchEvent(),如果返回true,表示要对事件进行过滤,则DOWN事件又直接进行到根布局的onTouchEvent()方法中;若返回false,要根布局不对事件进行过滤处理,继续向下传递,直到达到目标组件后,目标组件调用自己的dispatchTouchEvent()方法,由于是目标组件,直接分到自己的onTouchEvent(),目标组件如果处理完返回true,表示该事件被消费完毕,不再向上传递,如果返回false,则表示没有消费完,需要传到父组件,父组件在进行DOWN事件的处理,一直向上传递到事件被扔到虚拟机。


3、Android的系统架构
  1. Linux内核层:Android是基于Linux内核的,该层为安卓的硬件提供了底层的驱动,如显示驱动,蓝牙驱动。
  2. 系统运行库:该层通过一些c/c++库来为Android系统提供一些主要的特性支持,如SQLite库提供数据库的支持,Webkit提供浏览器内核的支持。同样这一层还有系统运行库,它提供了一些核心库,能够使开发者使用java语言来编写Android应用。该库还提供了Dalvik虚拟机,使得每一android应用程序能够独立运行
  3. 应用框架层:提供构建应用程序时要用到的API
  4. 应用层:手机安装的应用程序都在这一层
     

4、启动活动的方式
     说到活动的启动,就要提到堆栈和task,什么是task,它是一个具有栈结构的容器。当我们启动一个应用时候,系统就会为之创建一个task,来放置根Activity,默认情况下,同一个应用的Activity都是放在同一个task,当你启动另外一个应用的时候,就会新建一个task,而之前的task会被转到后台。
     Activity的LaunchMode属性可以指定Activity和Task之间的关系。
  1. standard:系统默认的加载方式,在同一个task里可以反复实例同一个Activity,比如在栈A,B,C,D里,当用intent启动D时,会实例一个新的D-Activity,放进task里,即A,B,C,D,D;如果此时按返回键的话,就会依次弹出D,D,C,B,A。
  2. singleTop:用一句话来概述就是,同一个Activity可以被多次实例,但是不允许两个相同的Activity相邻。比如在栈A,B,C,D里,当要启动D时,是不会新建一个D的,即还是A,B,C,D;但是如果要启动一个B时,就会新建一个B,即A,B,C,D,B;
  3. singleTask:在这个task里,不会出现两个相同的Activity,会把要跳转的Activity上面所有的Activity弹出。比如在栈A,B,C,D里,要启动B的话,就把C,D弹出,即task里只剩A,B;
  4. singleInstance:为有定义的singleInstance的Activity,新建一个task来放。比如说D的启动模式是singleInstance,同时栈里有A,B,C,如果要跳转D,则会新建个task2,并把D放在task2。
具体的情况,也可以参考以下网址:http://blog.csdn.net/yyingwei/article/details/8295969


5、Android如何做数据存储
  1. SharePreferences:是用来存储一些简单的信息,如用户的密码,账号。使用Map的数据结构来存储数据,以键值对的方式存储,采用了XML的格式将数据存储到设备中。(只能在同一个应用中共享数据)
          使用:SharePreferences是读取数据,但要修改,添加数据,则要利用edit()方法来获取Editor对象然后                       
          commit()提交。
          保存在:/data/data<package name>/shares_prefs文件夹下

  1. 文件存储方式:使用了Java的IO操作来进行文件的保存和读取,只不过Android的Context类中封装好了输入和输出流的方法。可以如图片,音频等
          使用:一、保存文件:openFileOutput获取输出流,参数为文件名和存储模式。二、读取文件:openFileInput获取输     
          入流,参数为文件名。
          保存在:/data/data<package name>/file
  1.  SQLite:是一个轻量型的关系型数据库,操作语句与mysql,sqlserver有类似。
  2. ContentProvider:可以提供一个数据如:系统的音频,视频,图片,私人通讯录等,当然要获得权限。除此之外,一个应用程序想访问另外一个程序数据也可以使用ContentProvider。
          使用:当外部需要对Content’Provider中的数据进行添加,删除,查询等,则要使用ContentResolver


0 0