Skip to content

Latest commit

 

History

History
217 lines (130 loc) · 7.31 KB

Android.mkd

File metadata and controls

217 lines (130 loc) · 7.31 KB

#Andorid简介

##描述

Google 的Andy Rubin把Android描述为:

为移动设备设计的第一个真正开放的综合平台,包含操作系统,用户界面和应用程序--所有软件都能运行在手机上,从而消除移动创新的障碍.


##Android SDK的特征

  1. 访问硬件(包括摄像头,GPS,传感器)

  2. 使用wifi,蓝牙技术和NGC进行数据传输

  3. 地图,地理编码和基于位置的服务

  4. 使用SQLite数据库进行数据存储和检索

  5. 共享数据和应用程序间通讯

  6. 使用Widget和Live Wallpaper增强主屏幕

  7. 广泛的媒体支持和2D/3D图形

  8. Cloud to Device Messaging

    C2DM为开发人员提供了一种根据服务器推送出,创建事件驱动应用程序的有效机制

  9. 优化的内存和进程管理


##开发框架简介 Android应用程序使用Java作为编程语言进行编写,但不是用传统的Java虚拟机执行,而是用一个定制的称为Dalvik的虚拟机执行.

每个Android应用程序都运行在它自己的Dalvik实例的一个进程中,它把内存管理和进程管理的所有工作都交给Android运行时进行处理,Android运行时最爱必要的时候会暂停和结束进程,从而更有效地管理资源.

Dalvik和Android运行时位于一个Linux内核之上,由于该Linux内核来处理低级的硬件交互,包括驱动程序和内存管理,同时有一套API来提供所有对底层服务,功能和硬件的访问.

###Android软件栈

简单地说,ANdroid软件栈就是通过一个应用程序提供一个Linux内核和一个C/C++库集合,而该应用程序为运行时和应用程序提供服务,并对它们举行管理.

  1. Linux内核

    核心服务(包括引荐驱动程序,进程和内存管理,安全,网络和电源管理)都由一个Linux2.6内核树立.内核还在引荐和软件栈的其他部分之间提供了一个抽象层

  2. 在内核之上,Android包含了中C/C++和辛苦(例如libc和SSL),以及一些其他类型的库

  3. Android运行时

    Android运行时可以然一个Android手机从本质上与一个移动Linux实现区分开来.由于Android运行时包含了和辛苦和Dalvik虚拟机,因此,它是向应用程序提供动力的引擎,它和库一起形成了应用程序框架的基础.

    1. 核心库

      虽然Android应用程序开发使用的是Java语言,但Dalvik并不是一个Java 虚拟机.Android核心库提供了Java和辛苦以及Android特定库可用的大部分功能.

    2. Dalvik虚拟机

      Dalvik是一个基于寄存器的虚拟机,它已经被优化从而确保一个设备可以高效地运行多个实例.他依赖Linux内核进行线程和底层内存管理.

  4. 应用程序框架

    应用程序框架提供了用来创建Android应用程序的类.它还对硬件访问提供了一般抽象,并管理用户界面和应用程序资源.

  5. 应用层

    所有的应用程序,包括原生的和第三方的,都在应用层上使用相同的库进行构建.应用层运行在Android运行时内,并且使用了应用程序框架中可用的类和服务


#使用Android模拟器的技巧

Eclipse选择AVD时会同时考虑程序使用的Android版本和minSdkVersion属性的设置值,当存在运行AVD时选用运行AVD。

把实体手机或平板电脑当成模拟器

  1. 安装USB驱动
  2. 将手机或平板电脑以USB连接到PC
  3. 设置》应用程序 启动调试相关功能
  4. 启动Eclipse,切换到DDMS界面,在左上的Devices窗口显示特殊模拟器就是实体手机或平板电脑
  5. 运行项目,则程序就会安装到实体设备中运行。

#Activity 活动是最基本的 Android 应用程序组件,应用程序中,一个活动通常就是一个单独的屏幕。每一个活动都被实现为一个独立的类,并且从活动基类中继承而来,活动类将会显示由视图控件组成的用户接口,并对事件做出响应

当一个新的屏幕打开后,前一个屏幕将会暂停,并保存在历史堆栈中。用户可以返回到历史堆栈中的前一个屏幕。当屏幕不再使用时,还可以从历史堆栈中删除。默认情况下,Android 将会保留从主屏幕到每一个应用的运行屏幕。

简单理解 Activity 代表一个用户所能看到的屏幕, Activity 主要是处理一个应用的整体性工作

#Intent 调用 Android 专有类 Intent 进行架构屏幕之间的切换。Intent 是描述应用想要做什么。Intent 数据结构两个最重要的部分是动作动作对应的数据

  1. 显式调用Intent

  2. 隐式调用Intent

    intent-filter

  3. 通过隐式调用其他程序

    1. android:scheme
    2. intent.setData
  4. 向其他Activity传递数据

    putExtra, getStringExtra

  5. 返回数据给上一个Activity

    startActivityForResult, putExtra, setResult, onActivityResult, onBackPressed

活动的生命周期

活动状态

  1. 运行状态

  2. 暂停状态

  3. 停止状态

  4. 销毁状态

  5. onCreate

  6. onStart

  7. onResume

  8. onPause

  9. onStop

  10. onDestroy

  11. onRestart

活动的生存期

  1. 完整生存期: onCreate->onDestroy
  2. 可见生存期: onStart->onStop
  3. 前台生存期: onResume->onPause

活动的启动模式

android:launchMode

  1. standard
  2. singleTop

Activity 最佳实践

  1. 知晓当前是在哪一个活动

    创建一个基类Activity, onCreate的时候Log.d("BaseActivity", getClass().getSimpleName());

  2. 随时随地退出程序

    建立一个集合类(静态变量, 静态方法), 每个Activity创建时自动添加进集合, 销毁时从集合中删除 需要退出时遍历集合中所有Activity, 全部finish, 并且killProcess

  3. 启动Activity的最佳写法

    把启动Activity需要的参数封装成一个actionStart静态方法放在Activity中, 一目了然


UI

控件

TextView

Button

ImageView

  1. android:src
  2. imageView.setImageSource

ProgressBar

  1. android:visibility
  2. progressBar.setVisibility
  3. style="?android:attr/progressBarStyleHorizontal", android:max=100
  4. progressBar.setProgress()

AlertDialog

  1. new AlertDialog.Builder
  2. dialog.setPositiveButton, dialog.setNegativeButton

ProgressDialog

  1. new ProgressDialog

Layout

LinearLayout

  1. android:orientation, android:layout_weight

RelativeLayout

  1. android:layout_alignParentTop, android:layout_alignParentLeft, android:layout_alignParentRight, android:layout_alignParentBottom, android:layout_centerInParent
  2. android:layout_toRightOf, android:layout_toLeftOf, android:layout_above, android:layout_below

FrameLayout

  1. android:layout_gravity

PercentageFrameLayout & PercentageRelativeLayout

  1. compile 'com.android.support.percent:24.2.1'
  2. app:layout_widthPercent, app:layout_heightPercent

Create Custom Widget

  1. LayoutInflater.from(context).inflate(R.layout.title, this)
  2. <com.example.uiscustomviews.TitleLayout...>

ListView

  1. ArrayAdapter<String> adpter=new ArrayAdpater<String>(MainActivity.this, android.R.layout.simple_list_item_1, data), listView.setAdapter(adpter)
  2. public class FruitAdapter extends ArrayAdatper<Fruit>, override the getView method, false in LayoutInflater.from(getContext()).inflate(resourceId, parent, false)
  3. Reuse convertView in override getView method
  4. view.setTag(viewHolder), view.getTag()