Android应用编程--基本概念

来源:互联网 发布:云计算在企业中的应用 编辑:程序博客网 时间:2024/06/06 06:46

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(Uri url, String where, String[] selectionArgs)insert(Uri url, ContentValues values)query(Uri uri, String[] projection, String selection, String[] selectionArgs, String sortOrder)update(Uri uri, ContentValues values, String where,String[] selectionArgs)

      • 定义自己的Content Provider


5.1 Android的存储

    一般的,应用程序的数据(包括文件)都是私有的,有以下四种持久存储方式:
    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.2 Broadcast 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)


















原创粉丝点击