Android应用开发_学习笔记

更新时间:2023-07-20 13:32:01 阅读量: 实用文档 文档下载

说明:文章内容仅供预览,部分内容可能不全。下载后的文档,内容与下面显示的完全一致。下载之前请确认下面内容是否您想要的,是否完整无缺。

一、Android基础及UI

1、Android程序的组成

一个Android程序一般有以下4个部分组成:

1)Activity(活动)

①、一个应用程序是由一个或者多个Activity组成。

②、一个Activity代表了可以和用户进行交互的可视化界面。

③、Activity通过布局管理添加各种View组件。

④、通过setContentView(int id)方法可以将视图呈现出来。

⑤、Activity的生命周期

图1 Activity的生命周期图

2)Broadcast Receiver(广播接收器)

①、Broadcast Receiver负责对外部事件做出响应。

②、Broadcast Receiver不生成UI,是不可见的。

③、Broadcast Receiver需要在程序中进行注册。

③、应用程序可以通过Context.sendBroadcast()将自己的intent广播出去。其他程序通过自身的Broadcast Receivers截获后进行时间处理。

3)Service(服务)

①、service运行在后台,负责处理一些用户看不到,并且会有持续时间的事情。比如下载数据,播放音乐等。

②、service是跑在程序的主线程中,处理耗时的事件续。

③、service没有用户界面所有用户实现的service必须继承系统的Service

类,并且在配置文件中进行注册。

4)Content Provider(内容管理器)

①、数据在Android当中是程序私有的。

②、Content Provider提供了多个程序间数据交互的机制。

③、Content Provider暴露出来一些标准的API来对数据进行操作:

query(Uri, String[], String, String[], String) :通过关键字查询数据。

insert(Uri, ContentValues) :将一组数据插入到指定的地方。

update(Uri, ContentValues, String, String[]) :更新数据。

delete(Uri, String, String[]) :删除数据。

2、AndroidManifest.xml文件组成

该文件主要声明Android应用程序的构成:

①、程序包的全局变量

②、活动(Activities)

③、内容管理器( Content Providers)

④、服务( Services)

⑤、广播接收器(Broadcast Receivers)

⑥、请求安全授权(uses-permission)

⑦、声明安全授权(permission)

4、Android主要UI组件的应用

1)Menu:如何打造友好的菜单

2)ListView:用好列表,做好程序

3)Dialog:人机友好互动交流

4)Toast和Notification:温馨的提醒

5、Menu

1)Menu与MenuItem的应用

①、Menu:负责管理MenuItem

添加一个MenuItem:add (int groupId, int itemId, int order, CharSequence title) ;

删除所有的MenuItem:clear() ;

②、MenuItem:一个菜单的条目

常用的方法:setTitle(…) ; setIcon(…) ; getItemId() ;

3)通过xml创建Menu

①、在Android工程的res/目录下新增一个menu/子目录,然后建立一个名为

②、onCreateOptionsMenu()方法里通过MenuInflater类引入定义好的菜单文件。

4)处理Menu响应事件

①、当我们点击菜单时,框架会捕获被点击的MenuItem组件,传递给相应的处理方法。

6、ListView

1)ListView介绍

ListView可以按设定的规则自动填充并展示一组数据列表。

2)创建一个最简单ListView(列表)

3)ListView与Adapter

Adapter是ListView和数据源的中间人,如下图。

图2 ListView与Adapter的关系图

4)Adapter深入分析

①、当每条数据进入看见区域时:

Adapter的getView()会被调用。

返回展示数据的View视图。

②、滚动屏幕时,会频繁调用上面步骤。

③、它可以支持上千条数据的显示。

7、Dialog(对话框)Notification

1)Dialog关系图

AlertDialog:警告对话框、ProgressDialog:进度对话框、DatePickerDialog:日期选择对话框、TimePickerDialog:时间选择对话框。

图3 Dialog关系图

2)实现一个AlertDialog(警告对话框)

3)Dialog的生命周期

图4 Dialog的生命周期图

4)创建个性化对话框

①、继承Dialog

②、重写onCreate()方法。

8、Toast(信息提示)Notification

1)Toast简介

①、Toast是Android提供的轻量级的提醒机制。

②、Toast永远不会获得聚焦。

③、Toast不会打断用户当前的操作。

④、信息在floating view呈现,然后会自动消失。

2)创建Toast

①、简单文字信息

通过make()方法创建Toast信息;

调用show()方法来显示Toast提示信息。

②、复杂Toast信息

Toast支持通过setView(view)添加view组件。

9、Status Bar Notification(状态栏通知)

1)Notification简介

①、Notification是Android提供的在状态栏的提醒机制。

②、Notification不会打断用户当前的操作。

③、Notification支持比Toast更复杂的点击事件响应。

④、NotificationManager来管理Notification。

2)创建Notification

二、Android布局

1、声明布局的两种方式

1)在XML文件中申明UI 组件

①、Android提供了从xml的节点元素,这些节点元素对应代码中的UI组件。 ②、优点:直观简洁,可读性强;实现了UI界面和逻辑代码的分离。

2)在代码中构造组件

①、在java代码中构造组件。

②、缺点:抽象模糊,可读性比较差;耦合性强,数据的表现和逻辑错杂很难。

2、布局属性

1)所有的View和ViewGroup都支持XML的属性。

2)XML的属性是可以继承的。

3)View和ViewGroup都支持下面两个属性。

3、Android中布局的盒子模型

1)View

支持padding(填充),但是不支持margin。

2)ViewGroup支持padding和margin(页边空白)。

4、FrameLayout 布局

FrameLayout对象就好比一块在屏幕上提前预订好的空白区域,然后你可以填充一些元素到里边。

注意:所有的元素都被放置在FrameLayout区域最左上的区域。而且无法为这些元素指定一个确切的位置。如果一个FrameLayout里边有多个子元素,那么后边的子元素的显示会重叠在前一个元素上。

5、LinearLayout 布局

LinearLayout是一种Android中最常用的布局之一,它将自己包含的子元素按照一个方

向进行排列。

方向有两种:①、水平Android:orientation="horizontal",子元素从左到右一个一个的水平排列;②、竖直 Android:orientation="vertical",元素从上到下一个接着一个的竖直排列。

6、RelativeLayout

RelativeLayout是一个相对布局类,RelativeLayout是一个容器,它里边的元素的位置是按照相对位置来计算的。

①、相对于其他组件的位置

②、相对于RelativeLayout的位置

7、TableLayout 布局

TableLayout 是一种表格式的布局。这种布局会把包含的元素以行和列的形式进行排列。表格的列数为每一行的最大列数。当然表格里边的单元格是可以为空。

8、Style(风格)

1)Style简介

将一个或多个属性的值应用到一个View组件当中,style可以作为一个属性用在布局文

2)定义Style

①、两个标签:<style>,<item>

9、Theme(主题)

1)Theme简介

一个或者多个属性应用到整个屏幕;theme是作为一个属性被用到Manifest

文件当中。

3)使用自定义Theme

①、在AndroidManifest.xml文件中设置Theme应用于整个工程。

10、Theme和Style对比

1)相同点

①、都定义在 <style> 的代码块当中。

②、都拥有一个或者多个Item。

2)不同点

①、影响范围不同:style针对的是单个元素;Theme针对的是整个Activity或者整个工程。

②、使用方式不同:style针对于单个组件的一个属性;Theme是在AndroidManifest.xml文件中进行使用。

三、Android事件处理、Intent及广播

1、Android处理事件的方法

1)用事件监听器(Event Listeners)来处理事件

事件监听器是一个借接口,它是由Android FrameWork(框架)来调用。

2)用Event Handlers来处理事件

2、常见的事件监听器

1)View.OnClickListener

②、当前View被点击的时候调用这个方法;或者当前View在获得焦点的时候,按下轨迹球后触发。

2)View.OnLongClickListener

①、里边只有一个方法onClick(View v)

②、当前View被点击的时候调用这个方法;或者当前View在获得焦点的时候,按下轨迹球后触发(超过1秒)。

③、相当于鼠标右键的功能。

3)View.OnFocusChangeListener

①、里边只有一个方法onFocusChange()

②、当前View焦点变化的时候onFocusChange()方法被调用。

4)View.OnKeyListener

①、里边只有一个方法onKey()

②、被调用的条件:当前组件获得焦点;用户按下键。

5)View.OnTouchListener

①、里边只有一个方法

onTouch()

②、当触摸事件传递给当前的组件的时候,注册在当前组件内部的OnTouchListener才会被执行。

3、Activity常用事件

4、Intent

1)什么是Intent

①、Intent是三大组件的粘帖剂。

②、一个Intent对象是对一次即将执行的操作的抽象描述。

2)Intent能做什么

①、通过Context.startActivity() 或者Activity.startActivityForResult() 来启动Activity。 ②、通过 Context.startService()启动一个新的服务。通过Context.bindService() 来建立客户端和服务的连接。

③、通过广播机制发送出去的Intent将会传给所有监听此Intent的broadcast receivers(广播接收者)。

3)剖析Intent

①、一个Intent对象主要包含六类信息。

②、并非每个都需要包含这六类信息。

图5 Intent包含的六类信息

5、Intent的属性

1)Compnent name

Component(组成)属性明确指定Intent的目标组件的类名称。通常 Android框架会根据Intents 中包含的其它属性的信息,比如action、data/type、category进行查找,最终找到一个与之匹配的目标组件。但是,如果 component这个属性有指定的话,将直接使用它指定的组件,而不再 执行上述查找过程。指定了这个属性以后,Intents的其它所有属性都是可选的。

2)Action

①、Action(操作):对执行动作的描述。

②、系统自定义的Action:

ACTION_MAIN ,我们最熟悉的一个。 "Android.Intents.action.MAIN",这个值在每个AndroidManifest.xml文档中都可以看到。它标记当前Activity作为一个程序的入口。 ACTION_VIEW,将数据 显示给用户。 ACTION_VIEW通常和特定的data相配合使用,用于给用户显示数据。

ACTION_DIAL,用于描述 给用户打电话的动作,通过和data配合使用,将会触 发给特定data的用户打电话。

ACTION_PICK,从特定的一组数据中进行选择数据操作。

ACTION_EDIT ,编辑特定的数据。

ACTION_DELETE ,删除特定的数据。

③、也可以定义自己的Action

3)Data

Data(数据):对于这次动作相关联的数据进行描述。以联系人应用为例,以下是一些action / data对,及其它们要表达的意图。

①、VIEW_ACTION content://contacts/1:显示标识符为"1"的联系人的详细信息。 ②、EDIT_ACTION content://contacts/1:编辑标识符为"1"的联系人的详细信息。 ③、VIEW_ACTION content://contacts/:显示所有联系人的列表。

④、PICK_ACTION content://contacts/:显示所有联系人的列表,并且允许用户在列表中选择一个联系人,然后把这个联系人返回给父activity。例如: 电子邮件客户端可以使用这个Intents,要求用户在联系人列表中选择一个联系人。

4)Category

Category(类别):对执行动作的附加信息进行描述。

例如:CATEGORY_HOME:显示桌面的Activity。

5)Extras

Extras(附件信息):其他一切附加信息的描述。

6)Flags

Flags(标记):指导如何来启动一个Activity。

6、两类不同的Intent

1)直接Intents

指定了component属性的Intents(调用setComponent(ComponentName)或setClass(Context, Class)来指定)。通过指定具体的组类,通知应用启动对应的组件。

2)间接Intents

没有指定ComponentName属性的Intents。这些Intents需要包含足够的信息,这样系统才能根据这些信息,在在所有的可用组件中,确定满足此Intents的组件。

在这个解析过程中,Android是通过Intents的action、type、category这3个属性来进行判断的,如下图。

7、Android中的广播机制

1)BroadCast

程序可以注册广播接收器,系统会将用于广播的Intent发送给满足要求的广播监听器。用户可以在广播监听器里边执行自己需要的操作。

2)如何发送广播

程序主动广播Intents是比较简单。在程序中只需要构造好一个Intents,然后调用

3)如何处理广播

②、注册BroadcastReceiver

Ⅰ、在AndroidManifest.xml文件当中进行注册

Ⅱ、在代码当中直接进行注册

四、Android数据存储及Service

1、Android中的三种数据存储方式

1)Preferences机制

①、Preferences的特点:轻量级的;保存的是原始数据类型的名值对;经常用于保存程序配置信息。

②、SharedPreferences使用

通过Context.getSharedPreferences()得到一个SharedPreferences

获取一个Editor,对保存的参数进行编辑

2)SQLite数据库存储

①、Android提供新建和使用SQLite 数据库的API

②、数据库都是私有的

③、数据文件保存在设备上的一下路径:/data/data/package_name/databases/my.db

3)content provider

2、SQLite创建和使用

1)SQLiteOpenHelper

负责管理数据库新建和数据库版本升级的辅助类。需要实现这个抽象类,该类含有的方法如下:

2)SQLiteDatabase

SQLiteDatabase里边的方法可以用来执行各种sql语句,比如新建,删除等。数据库的名字在当前程序当中必须保证唯一性。

3、SQLite数据库中的常见操作

1)新建数据库

2)新建数据表

3)删除数据表

4)插入数据

5)删除数据

6)更新数据

4、Cursor(指针)

Cursor提供了随机读写从数据库当中返回的结果集的接口,它是一个很有用的东西,在很多地方都能用的上 。

典型的是,一般从数据 库中返回的结果集都是以Cursor形式进行访问的。

返回新的Cursor,这个时候Cursor里边的指针指向的是 -1,只有当调用Cursor.moveNext()方法后这个指针才指向真正数据的第一项。

访问(query)完数据的每一项的步骤

①、首先得到一个Cursor后,先进行Cursor.moveNext(),让它移到真正的数据的第一项。

②、再调用下边的方法进行把这一行数据里边特定列的数据,也就是特定数据库表

5、SQLite的调试

命令行 调试:

①、进入到shell界面:adb shell

②、进入到sqlite3管理界面:sqlite3 /data/data/ <package_name>/databases/

举例:

C:\>adb shell

# sqlite3 /data/data/.ztenc.SQLite/databases/dbForTest.db

如果想回到shell界面:CTRL+D.或者执行sqlite> .exit

6、ContentProvider

1)ContentProvider简介

ContentProvider 是Android应用程序的四大组成部分之一。ContentProvider提供了这么一种机制:通过ContentProvider

不同程序之间可以共享数据。

如果你想让你的程序里边的数据共享出来给其他程序来用,那么只有两种方法:

①、自己实现一个Content Provider

②、将数据写到别的Content Provider里边

2)通过content Resolver来获取content Provider里边的数据

7、Service

1)创建Service

继承android.app.Service实现自己的服务

2)注册service

<service android:name="MyService"> </service>

3)启动service

startService(Intent service) ;

4)停止service

stopService(Intent service) ;

8、Service的生命周期

1)startService

①、service没有创建,则先调用onCreate方法,然后调用onStart方法。

②、service已经创建,则直接调用onStart方法。

2)stopService

调用onDestory最终销毁service。

五、Android开发进阶

1、一些标准操作的时间比较

2、用户体验的三个核心特征

1)快速

①、尽可能避免创建对象

②、使用Native方法

③、缓冲属性调用

④、尽可能避免接口引用实例对象

⑤、声明Final常量

⑥、避免浮点型数据的使用

2)响应

①、在Android中,程序的响应性被Activity Manager和Window Manager这两个系统服务所监视。当出现下列情况是,Android会认为该程序无响应:5秒内没有响应用户输入事件(如键盘输入);一个BroadcastReceiver 执行十秒还没有完成。

②、ANR--Application Not Responding(响应)

应用程序的执行在你的主线程里超过一段时间就会导致弹出ANR对话框;任何主线程的方法都不能做很复杂的处理,特别是Activity对象在它的关键生命周期函数里面不能处理太多,例如onCreate()和onResume()。

主线程应该提供一个Handler给子线程去返回完成信息

③、加强响应性方法

应用程序正在后台运行并响应用户输入进程正在创建:使用ProgressBar和

本文来源:https://www.bwwdw.com/article/gj31.html

Top