1.Android的四大组件是哪些,它们的作用

Android中四大组件分别是Activity、Service、BroadcastReceiver和ContentProvider。
Activity是一种展示型组件,用于向用户直接地展示一个界面,并且可以接受用户的输入信息进行交互。Activity的启动由Intent触发,其中又分为显示Intent和隐示Intent。Activity组件可以具有特定的启动模式,同一个Activity组件在不同的启动模式下会有不同的效果。

Service是一种计算型组件,用于在后台执行一系列的计算任务。与Activity不同的是:Activity组件只有一种运行模式,即启动状态,但是Service有两种运行状态,启动状态和绑定状态。当Service处于启动状态,这个时候Service内部可以做一些后台计算,并且不需要和外界有直接的交互。当Service处于绑定状态时,这个时候Service内部同样可以做一些后台计算,并且外界还可以方便的和Service组件进行通信。

BroadcastReceiver是一种消息型组件,用于在不同的组件乃至不同的应用之间传递消息。BroadcastReceiver也叫广播,这种广播有两种注册方法:静态注册和动态注册。静态注册是指在AndroidManifest中注册广播,这种广播在应用安装时会被系统解析,这种形式的广播不需要应用启动就可以收到相应的广播。动态注册广播需要通过Context.registerReceiver()来实现,并且在不需要的时候通过Context.unregisterReceiver()来解除广播,此种形态的广播必须要应用启动才能注册并接收广播,因为应用不启动就无法注册广播,无法注册广播就无法收到相应的广播。

ContentProvider是一种数据共享型组件,用于向其他组件乃至其他应用共享数据。对于ContentProvider组件来说,它的内部需要实现增删改查这四种操作,在他的内部维持着一份数据集合,这个数据集合既可以通过数据库来实现,也可以采用其他任何类型来实现,比如List,Map。

2.请介绍下Android中常用的五种布局

常用五种布局方式,分别是:FrameLayout(框架布局),LinearLayout (线性布局),AbsoluteLayout(绝对布局),RelativeLayout(相对布局),TableLayout(表格布局)。
1.、FrameLayout:所有东西依次都放在左上角,会重叠,这个布局比较简单,也只能放一点比较简单的东西。

2、LinearLayout:线性布局,每一个LinearLayout里面又可分为垂直布局(android:orientation=”vertical”)和水平布局(android:orientation=”horizontal” )。当垂直布局时,每一行就只有一个元素,多个元素依次垂直往下;水平布局时,只有一行,每一个元素依次向右排列。

3、AbsoluteLayout:绝对布局用X,Y坐标来指定元素的位置,这种布局方式也比较简单,但是在屏幕旋转时,往往会出问题,而且多个元素的时候,计算比较麻烦。

4、RelativeLayout:相对布局可以理解为某一个元素为参照物,来定位的布局方式。主要属性有:相对于某一个元素android:layout_below、 android:layout_toLeftOf相对于父元素的地方android:layout_alignParentLeft、android:layout_alignParentRigh;

5、TableLayout:表格布局,每一个TableLayout里面有表格行TableRow,TableRow里面可以具体定义每一个元素。每一个布局都有自己适合的方式,这五个布局元素可以相互嵌套应用,做出美观的界面。

3.Android 中有哪几种解析xml的类?官方推荐哪种?以及它们的原理和区别

在Android平台上可以使用SAX(SimpleAPI for XML)、DOM(DocumentObject Model)、以及Android自带的Pull解析器解析XML文件。

SAX解析XML文件采用的是事件驱动,也就是说,他读取单向并不需要解析完整个文档,在按内容顺序解析文档的过程中,SAX会判断当前读取到的字符是否符合XML语法中的某部分,如果符合就会触发事件,其实就是一些回调方法,然后进行判断处理。优点:解析速度快,占用内存少,适用于Android等移动设备。缺点:对于嵌套多个分支来说处理不是很方便。

DOM解析XML文件时,会将XML文件的所有内容以文档树方式存放在内存中,然后使用DOM API遍历XML树,检索所需的数据,主要用于PC机。优点:使用DOM解析XML的代码比较直观,基于SAX的实现更加简单。缺点:须将XML文件所有内容存放在内存中,所以消耗内存大,不适用Android等移动设备。

Pull解析器是Android内置解析XML文件的解析器,运行方式类似于SAX解析,只是产生的事件是一个数字,而非方法,因此可以使用一个switch对感兴趣的事件进行处理。Pull解析器对节点处理比较好,同样也很省内存,官方推挤使用Pull解析器解析XML文件,而且Android系统本身用到的XML文件内部也是使用Pull解析器进行解析的。

4.listview你是怎么优化的

ListView的Adapter的作用如下图所示:

Adapter的作用就是ListView界面与数据之间的桥梁,当列表里的每一项显示到页面时,都会调用Adapter的getView方法返回一个View。想过没有? 在我们的列表有1000000项时会是什么样的?是不是会占用极大的系统资源?

先看看下面的代码:

public View getView(int position, View convertView, ViewGroup parent) {    View item =mInflater.inflate(R.layout.list_item_icon_text, null);    ((TextView)item.findViewById(R.id.text)).setText(DATA[position]);    ((ImageView) item.findViewById(R.id.icon)).setImageBitmap(    (position & 1) == 1 ? mIcon1 : mIcon2);    return item;}

怎么样?如果超过1000000项时,后果不堪设想!您可千万别这么写!

我们再来看看下面的代码:

public View getView(int position, View convertView, ViewGroup parent) {    if (convertView == null) {        convertView = mInflater.inflate(R.layout.item, null);    }    ((TextView)convertView.findViewById(R.id.text)).setText(DATA[position]);    ((ImageView)convertView.findViewById(R.id.icon)).setImageBitmap(    (position & 1) == 1 ? mIcon1 : mIcon2);    return convertView;}

怎么样,上面的代码是不是好了很多?系统将会减少创建很多View。性能得到了很大的提升。

还有没有优化的方法呢? 答案是肯定的:

public View getView(int position, View convertView, ViewGroup parent) {    ViewHolder holder;    if (convertView == null) {        convertView =mInflater.inflate(R.layout.list_item_icon_text, null);        holder = new ViewHolder();        holder.text = (TextView)convertView.findViewById(R.id.text);        holder.icon = (ImageView) convertView.findViewById(R.id.icon);        convertView.setTag(holder);    } else {        holder = (ViewHolder) convertView.getTag();    }    holder.text.setText(DATA[position]);    holder.icon.setImageBitmap((position & 1) == 1 ? mIcon1 : mIcon2);    return convertView;}static class ViewHolder {    TextView text;    ImageView icon;}

1.什么是ANR 如何避免它?
http://blog.csdn.net/Zengyangtech/article/details/6025671

2.Android性能优化之ListView缓存机制
http://www.2cto.com/kf/201408/329966.html
http://jingyan.baidu.com/article/e5c39bf587cb8b39d76033bf.html

3.MVC和MVP在app中的对比分析以及实际应用
http://www.jcodecraeer.com/a/anzhuokaifa/androidkaifa/2015/0313/2599.html
http://blog.csdn.net/lmj623565791/article/details/46596109
http://www.cnblogs.com/tiantianbyconan/p/5036289.html

4.java中Runnable和Thread的区别
http://blog.csdn.net/wwww1988600/article/details/7309070

更多相关文章

  1. 【android】Android(安卓)Wi-Fi Direct 开发指南
  2. Android架构组件(三)——ViewModel
  3. Android(安卓)studio的常见布局
  4. Android消息处理机制——AsyncTask 源码解析
  5. (转载)Android之Intent的基本使用
  6. intent
  7. 《Android/OPhone 开发完全讲义》已出版,现提供源代码下载
  8. Android(安卓)Material Design 之CardView 属性解析及使用
  9. Android异步消息处理机制Handler完全解析

随机推荐

  1. Android(安卓)Audio代码分析23 - attachA
  2. ANDROID与.Net之间JSON实践
  3. 【笔记】android捕获触摸事件
  4. android app rate on google play and am
  5. 【移动安全】Android(安卓)App Smail代码
  6. Android抖动动画
  7. Android中使用GridView实现标签效果源码
  8. 百度地图中android获取经纬度和地方名称
  9. Failed to create directory C:\ Progra
  10. Android使用Retrofit请求WebService