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的作用如下图所示:
[置顶] Android:Android面试准备一_第1张图片
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 studio的常见布局
  2. Android:布局(线性布局LinearLayout)
  3. Android学习笔记---第三天---基础UI组件---Button&ImageButton
  4. Android学习笔记---第二天---基础UI组件---TextView
  5. Android组件化导致的代码不生效
  6. Android四大组件之 服务Service

随机推荐

  1. 【转】不要被虚张声势的 Android 忽悠了
  2. Android 读取硬件信息技巧
  3. windows 8环境—android studio初步体验(
  4. Android彻底组件化方案实践
  5. 王家林,云计算,大数据,Hadoop,Android,iOS,HTML
  6. 安卓View理解总结
  7. android开发学习笔记(2)android的基本介绍
  8. ArcGIS for Android 支持模拟器开发
  9. Android 5.0之应用中实现材料设计—Mater
  10. Android XML解析学习——Dom方式