1. Android应用程序组成

一个Android应用程序可能包含其中一部分或几部分。

2 Activity

Activity负责创建窗口,在此窗口中通过setContentView来放置你的UI。 通过view管理UI
每一个有用户界面的应用至少包含一个activity
一个应用可以有多个activity,其中一个作为main activity用于启动显示
Activity通过startActivitystartActivityForResult启动另外的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

实现一个BroadcastReceiver

public 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)


















更多相关文章

  1. TextView获取父控件的绘图状态
  2. Android(安卓)StatFs类
  3. android开发之 Wifi的四个类
  4. android 关于prop属性
  5. 用ndk-build 编译C语言文件,生成可在android系统上运行的文件
  6. Android存储设备(U盘,SD卡)状态监测
  7. Android(安卓)调用系统拍照 笔记 - 会说话的哑巴的个人页面 - 开
  8. Android控件之ToggleButton(多状态按钮)
  9. 深入浅出 - Android系统移植与平台开发(二) - 准备Android开发环境

随机推荐

  1. Kotlin Android(安卓)Extensions 的未来
  2. Android原生方法和Web JS互相调用
  3. (Androidx)error: expected reference but
  4. 待学习 Android(安卓)Building Multi-Lan
  5. Android(安卓)Studio 4.1 中 Design Tool
  6. android BottomSheetDialog新控件解析,实
  7. Android———ContentProvider理解与使用
  8. Android(安卓)Studio导入android-support
  9. 四大组件及Window简要运行时序图
  10. Layout的编写