Android应用开发的基本概念:
前言
做游戏将近三年(主要以页游和手游),今年初公司业务发展需要转做Android,到现在已学习4个月之久,已初步搭建完成公司的SDK项目,项目闲下来使用博客备忘自己的前期的一些总结归纳(东西不是原创来自互联网,博客的一些梳理,大纲备忘),本人不喜欢文字长篇大论,简单的图表+简短的重点备忘个人认为是备忘的较好方式(能快速拉起自己的存储记忆,然后具体问题具体分析),备忘的无非是一个【流程+重点】
【小公司,目前孤军奋战、如果有遗漏或者成长建议请大牛指出!感谢,感谢!】
1 Android MVC简介:
- 模型对象:存储着应用的数据和业务逻辑【如 : 网络、数据库、IO数据等】
- 视图对象:知道如何在屏幕上绘制自己以及如何响应用户的输入,如用户的触摸等【如:View 、VieGroup 、Button 等组件、XML文件进行界面的描述、webView中的html+css+js】
- 控制对象 :包含了应用的逻辑单元,是视图与模型对象的联系纽带【如:Activity、Service、过滤Filter等】
2 Android 程序设计基础
2.1 基本组件
2.1.1 Activity :
Activity 是用户与UI交互的控制层
启动和生命周期:
Android 系统会通过调用对应于其生命周期中特定阶段的特定回调方法在 Activity 实例中启动代码。 有一系列可启动Activity的回调方法,以及一系列可分解Activity的回调方法。
生命周期:
Activity状态转换:
三种常用的状态情况:
Running :
在这种状态下,Activity处于前台,且用户可以与其交互。(有时也称为“运行”状态。)
Paused :
在这种状态下,Activity被在前台中处于半透明状态或者未覆盖整个屏幕的另一个Activity—部分阻挡。 暂停的Activity不会接收用户输入并且无法执行任何代码。
Stopped:
在这种状态下,Activity被完全隐藏并且对用户不可见;它被视为处于后台。 停止时,Activity实例及其诸如成员变量等所有状态信息将保留,但它无法执行任何代码。
Activity 启动方式:
a、指定启动器Activity 在 mainfest.xml 中进行配置如:
···xml
2.1.2 Intent
一个 Intent 是一个消息Object,【请求+数据】 你能够使用从另一个 app component 请求一些动作。
Inten 的处理主要是操作系统负责:
基本操作
启动一个Activity:Context.startActivity(Intent intent);
启动一个Service:Context.startService(Intent service);
绑定一个Service:Context.bindService(Intent service, ServiceConnection conn, int flags);
发送一个Broadcast:Context.sendBroadcast(Intent intent);
两种类型:
(1):Explicit intents(显示意图).
显示意图,会指定响应这意图的组件。
(2): Implicit intents (隐含意图)
隐含意图不声明要启动的组件的类名称,而是声明要执行的操作。 该操作指定您要执行的操作,比如查看、编辑、发送或 获取 某项。 意向通常还包含与操作关联的数据,比如您要查看的地址或您要发送的电子邮件消息。根据要创建的意向,数据可能是 Uri、多种其他数据类型之一,或意向可能根本就不需要数据如:
Uri number = Uri.parse("tel:5551234");
Intent callIntent = new Intent(Intent.ACTION_DIAL, number);
注意:如果您调用了意向,但设备上没有可用于处理意向的应用,您的应用将崩溃
要确认是否存在可响应意向的可用Activity,请调用 queryIntentActivities() 来获取能够处理您的Intent 的Activity列表。 如果返回的 List 不为空,您可以安全地使用该意向
【详细可以看Internet 的匹配过程】
PackageManager packageManager = getPackageManager();
List activities = packageManager.queryIntentActivities(intent,
PackageManager.MATCH_DEFAULT_ONLY);
boolean isIntentSafe = activities.size() > 0;
2.1.3 Context Provider
Content providers管理对结构化数据集的使用.它们封装数据,并提供了数据安全的机制.Content providers是从一个进程连接另一个进程中的数据的标准接口。其主要作用不是用于数据存储、而是给外部进程 APP 提供数据。【如我们 通讯录数据可以放在 Content providers 中等】
官方解释:其本质是对AIDL 的封装
Content providers are one of the primary building blocks of Android applications, providing content to applications. They encapsulate data and provide it to applications through the single ContentResolver interface. A content provider is only required if you need to share data between multiple applications. For example, the contacts data is used by multiple applications and must be stored in a content provider. If you don’t need to share data amongst multiple applications you can use a database directly via
2.1.4 Service
Service 是一个能在后台运行操作的应用组件,不提供用户交互。
一个服务基本上有两种形式:
(1)Started
一个服务开启,当一个应用组件(例如一个activity)调用 startService()。一旦开启,一个服务将一直在后台运行,即使开启它的组件已经被销毁。通常,一个服务开启执行一个单一的操作,并且不会返回结果给调用者。
例如:下载,上传,当一个操作停止应该销毁这个服务。
(2)Bound
一个服务是“bound”当一个应用组件绑定同一个服务,【通过调用 bindService()】。一个绑定的服务提供Client-Server的接口,允许组件和服务相互作用,发送结果,得到结果,甚至访问IPC进程。一个被绑定的服务和绑定它的组件的运行时间一样。当多个组件一个服务时,当所有的绑定解除,这个服务被销毁。
2.2 Android资源组织读取和核心文件
2.2.1资源组织:
android 资源整体分两大类,分别是assets和res
如图:
a. assets。assets类资源放在工程根目录的assets子目录下,它里面保存的是一些原始的文件,可以以任何方式来进行组织。
这些文件最终会被原装不动地打包在apk文件中。如果我们要在程序中访问这些文件,那么就需要指定文件名来访问。
例如,假设在assets目录下有一个名称为filename的文件,那么就可以使用以下代码来访问它:
AssetManager am= getAssets();
InputStream is = assset.open("filename");
- res。res类资源放在工程根目录的res子目录下,它里面保存的文件大多数都会被编译,并且都会被赋予资源ID。这样我们就可以在程序中通过ID来访问res类的资源。res类资源按照不同的用途可以进一步划分为以下9种子类型:
详细见: Android 官网
Res 文件 下的文件大部分会被 【aapt资源打包工具】编译(raw 文件下除外),并在自动生成的 R.java 中生成对应的资源ID,
在程序或者资源文件中通过这些ID常量来访问指定的资源.
2.1.2资源适配选择
2.2.3资源打包、读取流程:
2.2.4 核心文件:
AndroidMainfest.xml
每个应用的根目录中都必须包含一个 AndroidManifest.xml 文件(且文件名精确无误)。 清单文件为 Android 系统提供有关您的应用的基本信息,系统必须获得这些信息才能运行任意应用代码。 此外,清单文件还可执行以下操作.
主要包含:
- 为应用的 Java 软件包命名。软件包名称充当应用的唯一标识符
- 描述应用的各个组件,即:构成应用的 Activity、服务、广播接收器和内容提供程序。 为实现每个组件的类命名并发布其功能(例如,它们可以处理的 Intent 消息)。根据这些声明,Android 系统可以了解这组件具体是什么,以及在什么条件下可以启动它们
- 确定将托管应用组件的进程
- 声明应用必须具备哪些权限才能访问 API 中受保护的部分并与其他应用交互
- 还声明其他应用与该应用组件交互所需具备的权限
- 列出 Instrumentation 类,这些类可在应用运行期间提供分析和其他信息。这些声明只会在应用处在开发和测试阶段时出现在清单文件中;它们会在应用发* 布之前被删除
- 声明应用所需的最低 Android API 级别
- 列出应用必须链接到的库
2.3 用户界面UI及常用组件及事件
2.3.1常用组件:(汇总)
- TextView:
- ListView
- Tost
- EditText
- RadioGroup
- RadioButton
- CheckBox
- Spinner
- DatePicker
- TimePicker
- Button
- Menu
- Dialog
- ImageView
- ImageButton
- ImageSwitcher
- Gallery(拖动效果)
- AutoComplete-TextView 、
- GridView
- ScrollView、
- ProgressBar
- SeekBar
- Notification
- NotificationManager(状态栏提示)
- ProgressDialog
2.3.2 View 的事件分发机制:
2.4 Android数据存储方式
2.4.1 shared Preferences
应用程序在运行的时候,可能会随着用户的使用而保持该用户的配置信息,如上次播放时的eq设置,音量设置,上网的cookies信息等等,这些小量 的信息可以通过SharedPreferences来保持,通过SharedPreferences保持的数据为一个XML文件,位于应用程序的私有文件夹
2.4.2 Files
Android 中可以在设备本身存储设备或者外接入的存储设备中创建用于保存数据的文件。默认情况下,文件之间不能共享。用文件来存储数据可以通过
openFileOuput 获得对文件流操作。(如果文件不存在会自动创建一个文件)通过loader方法来去文件中的数据。
2.4.3 SQLite:
SQLite 是一种嵌入式关系型数据库、支持大小为2T 具有如下特征
轻量级: 编译后动态连接库小
独立:不依赖第三方软件
跨平台、且支持多语言接口
2.4.5NetWork
通过网络获编写服务端获取、保存资源。