Android相关知识

1. Android四大组件:

  Activity:程序与用户交互的窗口,初始化界面

  service:后台服务于Activity,封装有一个完整的功能逻辑实现

  ContentProvider:是Android提供的第三方应用数据访问方案,可以派生Content Provider 类,对外提供数据

  BroadCast Receiver:接受一种或者多种intent做触发事件,然后封装成notification,统一了android的时间广播模型

2.android的五种常用布局:五个布局嵌套使用,可以做出很好的效果

  LinearLayout:线性布局,分为垂直布局和水平布局

  RelativeLayout:相对布局,相对参照物来布局

  FrameLayout:

  AbsoluteLayout:绝对布局:绝对布局用X,Y的坐标来定义元素的位置,很少用吧

  TableLayout:表格布局:每一个TableLayout里面有多个TableRow

3.android中的动画分为哪几种,他们的特点和区别是什么?

4.android里面有哪几类解析xml的类,官方推荐哪几种,以及他们的区别?

  XML解析主要有三种,SAX,DOM,PULL。常规在pc上开发我们使用DOM相对轻松些,但是一些性能敏感的手机和数据库上我们还是采用SAX方式,

  不占内存空间,读取是单向的,但是对于解析属性来说不是很方便。DOM会把整个XML读进内存,如果数据量不是很大的话,推荐这种方式。

5.ListView的优化方案

  1.自定义适配器:重写getView方法,参数中的contentview是不是null,不是的话就创建,是的话就重复利用

  2.如果数据量很大的话,可以考虑分页加载

6.android的数据存储方式:SharedPreferences 文件数据存储 SQLite数据库存储  ContentProvider存储数据  网络存储数据

  SharedPreferences: 是存储一些简单的配置信息的一种方式

  文件存储方式:和java的文件存储方式一样

  SQLite数据库:内置的轻量级数据库

  ContentProvider:这个还要看一看---------------------

7.activity的启动模式有哪些?分别是什么含义?

  standard  singleTop  singleTask   singleInstance

  1.如何决定所属Task:standard和singleTop都是和启动着是在同一个Task中的,而后两种则是以Activity作为Task的基元素

  2.前两种允许多个实例,存在不同的task中,一个Task也可以包含多个实例,而后两种只限制生成一个实例,并且是Task的根元素

  3.是否允许其他activity在本Task内:singleInstance独占一个Task

  4.是否每次都生成新实例:standard都会生成新实例,singleTop如果task在栈顶的话,不生成新实例,直接使用新实例,否则就会创建一个新实例

    singleInstance不允许有其他的Activity所以每次都会重用,singleTask如果在栈顶则接受intent,否则就抛弃,但是该Task仍会回到前台。

8.跟activity和Task有关的Intent启动方式有哪些?其含义?

  FLAG_ACTIVITY_NEW_TASK    FLAG_ACTIVITY_CLEAR_TOP  FLAT_ACTIVITY_SINGLE_TOP  

9.请描述ACTIVITY的生命周期

10.Activity在屏幕旋转时的生命周期

  不设置Activity的android:configChanges时,切屏会重新调用个生命周期,切横屏是执行一次,切竖屏时执行两次,设置android:orientation时,

   切换横竖屏只执行一次设置Activity的android:configureChanges=“orientation|keyboardHidden” 时,切屏时不会重新调用各个生命周期。

11.如何启动service,如何停止service

  1.继承自service类    public  class SMSService extends Service{}

  2.在AndroidManifest.xml文件中的<application>节点中对服务进行配置 <service android:name=".SMSService">

    服务不能自己运行,需要调用Context.startService()或Context.bindServie()方法启动服务。这两种方法的启动场合不同,

    使用startService()启动服务,调用者与服务之间没有关联,即使调用者退出了,服务仍然运行。使用bindService()方法启动

    服务,调用者与服务绑定在了一起,调用者一旦退出,服务也就终止了。使用startService()方法启动服务只能通过context.stopService()

    来结束服务,服务结束会调用onDestroy方法。使用bindService()也只能通过unbindService()来停止服务。

12.注册广播有哪几种方式,这些方式有何优缺点?谈谈android引入广播机制的用意

13.请解释单线程模型下的Message Handler Message Queue Looper之间的关系

  Handler用来获取当前线程中的Looper对象,Looper用来从Message Queue中获取Message,再由handler进行分发和处理

  Message Queue:消息队列,用来存放通过handler发布的消息,可以通过Looper.myQueue得到当前线程的消息队列

  Looper:是handler和消息队列之间的桥梁

  Message:消息的类型,是线程间交流信息,处理数据的后台线程需要更新UI,则发送Message内含一些数据给UI线程。最好通过

      Message.obtain()或者Handler.obtainMessage()来获取Message对象来提高效率

16.什么是ANR,如何避免它?

  ANR:Application not   Responding,在UI主线程或者BroadcastReceiver在10s内没有执行完毕,就会出现应用程序无响应。

  避免方法:更少的去创建东西,让耗时的任务放到子线程中去完成,主线程提供一个handler确保子线程执行完毕后可以把结果提交

  给主线程。

17.什么情况下导致Force close?如何避免

  当程序出现异常时

  避免:在写程序的时候要思维缜密,能过捕获异常,在logcat中能看到异常的信息

18.描述一下android的系统架构

  android架构从下往上依次是  linux内核层   运行库     应用程序框架层    应用程序层

  要想写出优质高效的代码,就必须对整个applicationframework有深入的理解,也就能驾驭整个开发

19.contentprovider是如何实现共享的

20.Sevice和Thread的区别?

  Thread:是程序执行的最小单元,他是分配cpu的基本单位,可以用thread来执行一些异步的操作

  Sevice:

  如果service是一种服务,我们可以在有context的地方调用函数来控制它,但是Thread是做不到的

21.android api本身没有抛出异常,则其在运行的时候,会不会抛出runtime异常?

会的,比如空指针,没有获得权限等等,可以查看logcat

22.IntentService有何优点 ?

23.如果后台activity由于某种原因被系统回收了,如何在被系统回收之前保存当前状态?

    重写onSaveInstanceState()方法,在此方法中保存需要保存的数据,该方法将会在activity回收之前调用。通过重写onRestoreInstanceState()方法可以

    从中提取出保存好的数据。把数据写入配置文件,然后需要时从中读出,这就类似于

36.如何将SQlite数据库与apk文件一起发布?

  可以将*.db拷贝到res/raw文件夹下,这个目录下的文件不会被压缩,这样在第一次读取数据库的时候,就要将数据库文件拷贝到复制到手机的某个文件夹下,

  再打开数据库,拷贝的方法getResources().openRawResource方法获得inputStream,然后在写入到文件中,,在sdk中通过SQLiteDatabase.openOrCreateDatabase()来打开数据库文件

39.java如何引用本地语言

  可以通过JNI接口

41.NDK是什么?

  NDK是一系列工具的集合,可以帮助开发者迅速开发C/C++的动态库,并能自动将so和java应用打成apk包。交叉编译器,并提供了相应的mk文件隔离cpu

平台等的差异,开发人员至于简单的修改就可以创建出so

网址:http://blog.csdn.net/ihrthk/article/details/7338834

原文地址:https://www.cnblogs.com/zhanglanyun/p/2557047.html