Android应用编程--基本概念
1. Android应用程序组成
一个Android应用程序可能包含其中一部分或几部分。2 Activity
• Activity负责创建窗口,在此窗口中通过setContentView来放置你的UI。 •通过view管理UI•每一个有用户界面的应用至少包含一个activity
•一个应用可以有多个activity,其中一个作为main activity用于启动显示
•Activity通过startActivity或startActivityForResult启动另外的activity
•通过View管理UI
•View绘制UI与处理UI event
•View可通过xml描述定义,也可在代码中生成。
•setContentView(R.layout.main)
•Android建议将UI设计和逻辑分离
•android UI设计类似swing,通过布局(layout)
public void setContentView(int layoutResID)public void setContentView(View view)public void setContentView(View view, ViewGroup.LayoutParams params)
最简单的就是你可以把Activity看成一个User Interface Program,原则上它会提供使用者一个交互式的接口功能,那一个UI只有一个activity吗?非也,举例来说:一个email程序,就可能 包含三个activity:邮件列表的activity、显示邮件内容的activity、写新邮件或回复邮件的activity。
所有的Activity在系统里由Activity堆栈所管理,当一个新的Activity被执行后,它将会被放置到堆栈的最顶端,并且变 成"running activity", 而先前的Activity原则上还是会存在于堆栈中,但它此时不会是在前景的情况,除非刚刚那个新的Activity离开。
当一个Activity在屏幕的最上层时(堆栈的最顶端),它就是属于active或running的状态。
•PAUSE:如果一个Activity失去焦点(focus)但还看得到它的画面(比如:一个新的Activity画面并不是全屏幕或者它是一个半透明的情况),那失去焦点的这个Activity则处在paused的状态。像这个失去焦点的Activity它还是完全活着的,并没有消失。(活着的意思是指,Activity自已本身所有的状态及数据都还是存在的,也跟窗口管理程序window manager保持连系着),像这种paused的activity,会在一种情况下消失,那就是当系统的内存不够用之时,系统会自动判断,把不重要的 activity移除。
•STOP:如果一个Activity被其它的Activity完全的遮住时,这个被遮的Activity处于stop的状态,它仍然保有全部的状态及数据,但因为它已不再被使用者看见,所以它的画面是被隐藏起来的(画面不需要更新),当系统内存不足时,这种stop状态的activity是最先被系统考虑拿来释放内存的。
当一个Activity处于pause或stop的状态时,系统可以要求Activity结束(finish)或直接移除(kill)它。当它需要再度呈现在使用者面前时,它必需要能完整的重新启动及回复先前的状态 。
Activity状态图如下图所示:
3. Intent
•类似于消息、事件通知,它描述将被执行的操作;
•Intent构成:mAction、mData、mType、mPackage、mComponent、mCategories;
private String mAction; private Uri mData; private String mType; private String mPackage; private ComponentName mComponent; private int mFlags; private HashSet<String> mCategories; private Bundle mExtras; private Rect mSourceBounds; private Intent mSelector; private ClipData mClipData;
• 是 Activity、Service、broadcast receiver之间的桥梁;
•其使用场景如下:
// Interface to global information about an application environment.public abstract class Context { public abstract void startActivity(Intent intent); public abstract void sendBroadcast(Intent intent); public abstract ComponentName startService(Intent service); public abstract boolean bindService(Intent service, ServiceConnection conn,int flags);}
• 两类intent:
1) 显式:指定具体的目标组件处理
startActivity(new Intent(ActivityLifecycle.this, AnotherActivity.class));
2) 隐式:由系统接受并决定如何处理
startActivity(new Intent(Intent.ACTION_DIAL));
• 在AndroidManifest.xml中定义Activity、Service、Broadcast Receiver可接受的Intent,如下图所示:
• Intent filter: action、category、data
•实例
4. Service
•没有UI,启动之后一直运行于后台
•例子:音乐播放器
•与应用程序的其他模块(例如activity)一同运行于主线程中
•通过startService或bindService创建Service
•通过stopService或stopSelf终止Service
•一般的,在activity中启动和终止service
• Service生命周期
5. Content Provider
•什么是Content Provider?1) Content Provider 是Android应用程序的四大组成部分之一
2) 是android中的跨应用访问数据机制
•为何需要Content Provider?
1) Android中每一个App的资源是私有的
2) App通过Content Provider和其他App共享私有数据
•如何使用Content Provider?
通过ContentResolver访问:Context.getContentResolver()
•URI定位资源,例子如下:
content://contacts/people
content://call_log
•类似关系数据库的访问方式(ContentResolver的方法),其方法如下:
delete(Uriurl,String where,String[]selectionArgs)insert(Uriurl,ContentValuesvalues)query(Uriuri,String[]projection,Stringselection,String[]selectionArgs,StringsortOrder)update(Uriuri,ContentValuesvalues,Stringwhere,String[]selectionArgs)
•定义自己的Content Provider
5.1Android的存储
一般的,应用程序的数据(包括文件)都是私有的,有以下四种持久存储方式:1) Preferences——类似properties,xml文件
2) Files
3) Database——SQLite
4) Network
6. Broadcast Receiver
•接收和处理android的广播消息•Android的广播机制:
1) 系统事件——例如变换时区、电量低等
2) App发出广播消息:sendBroadcast
3) 广播消息:Intent
6.1 创建Broadcast Receiver
•实现一个BroadcastReceiverpublic class MyAndroidReceiver extends BroadcastReceiver{ override onReceive(Context context, Intents Intents) { ... }}•注册BroadcastReceiver
1) 在AndroidManifest.xml文件中进行注册
<receiver Android:name=“MyAndroidReceiver"> <intent-filter> <action Android:name="com.eoeAndroid.action.NEW_BROADCAST"/> </intent-filter></receiver>2)在代码当中直接进行注册
IntentFilter filter = new IntentFilter("NEW_BROADCAST" );MyAndroidReceiver MyAndroidReceiver = new MyAndroidReceiver();registerReceiver(MyAndroidReceiver , filter);
6.2Broadcast Receiver生命周期
•Broadcast receiver对象在onReceive返回后被销毁
•onReceive中不适合处理异步过程。例如弹出对话框与用户交互,可使用消息栏替代。
7. Android权限控制
•在AndroidManifest.xml中描述一个app的权限,例如:<manifest xmlns:android="http://schemas.android.com/apk/res/android" package="com.android.app.myapp" > <uses-permission android:name="android.permission.RECEIVE_SMS" /> <uses-persission android:name="android.permission.INTENET"/></manifest>•权限举例(参考android.Manifest.permission)
更多相关文章
- TextView获取父控件的绘图状态
- Android(安卓)StatFs类
- android开发之 Wifi的四个类
- android 关于prop属性
- 用ndk-build 编译C语言文件,生成可在android系统上运行的文件
- Android存储设备(U盘,SD卡)状态监测
- Android(安卓)调用系统拍照 笔记 - 会说话的哑巴的个人页面 - 开
- Android控件之ToggleButton(多状态按钮)
- 深入浅出 - Android系统移植与平台开发(二) - 准备Android开发环境