Android 四大组件之Activity

四大应用程序组件是Android应用程序中最重要的部分,分别是:Activity、Server、Content provider、BroadCast。

1、Activity
(1)Activity是Android提供和用户交互的组件,每一个activity被给予一个窗口,在上面可以绘制用户接口。
 注意:必须在manifest文件声明activity,为了它可以被系统访问。例子:

<application        android:allowBackup="true"        android:icon="@drawable/ic_launcher"        android:label="@string/app_name"        android:theme="@style/TitleAppTheme" >        <activity            android:name="com.ffchat.localchat.HomeActivity"            android:label="@string/app_name" >            <intent-filter>                <action android:name="android.intent.action.MAIN" />                <category android:name="android.intent.category.LAUNCHER" />            intent-filter>        activity>        <activity android:name="com.ffchat.localchat.GridViewActivity" >        activity> application>  

在Activity的声明中配置对于的属性,比如:

<action android:name="android.intent.action.MAIN" />

表示应用默认进入的Activity;

<category android:name="android.intent.category.LAUNCHER" />

表示桌面是否可以显示对于的应用图标。

(2)每一次一个activity启动,前一个activity就停止了,但是系统保留activity在一个栈上(“back stack”)。当一个新activity启动,它被推送到栈顶,取得用户焦点。Activity的生命周期可以用一张图来表示:

public class Activity extends ApplicationContext {protected void onCreate(Bundle icicle);protected void onStart();protected void onRestart();protected void onResume();protected void onFreeze(Bundle outIcicle);protected void onPause();protected void onStop();protected void onDestroy();}

(3)启动Activity的方式:
启动模式简单地说就是Activity启动时的策略,在AndroidManifest.xml中的标签的android:launchMode属性设置;

启动模式有4种,分别为standard、singleTop、singleTask、singleInstance;

每个应用都有一个任务栈,是用来存放Activity的,功能类似于函数调用的栈,先后顺序代表了Activity的出现顺序;

比如Activity1–>Activity2–>Activity3,则任务栈为:

A、standard:每次激活Activity时(startActivity),都创建Activity实例,并放入任务栈;

B、singleTop:如果某个Activity自己激活自己,即任务栈栈顶就是该Activity,则不需要创建,其余情况都要创建Activity实例;

C、singleTask:如果要激活的那个Activity在任务栈中存在该实例,则不需要创建,只需要把此Activity放入栈顶,并把该Activity以上的Activity实例都pop;

D、singleInstance:如果应用1的任务栈中创建了MainActivity实例,如果应用2也要激活MainActivity,则不需要创建,两应用共享该Activity实例;

在AndroidManifest中配置:

android:launchMode="standard/singleTop/singleTask/singleInstance"/>

(4)Activity传递参数:
activity之间有两种参数传递形式:
一种是一个activity启动另一个activity的时候传递数据到另一个activity,然后在activity中接受到数据,做相应处理。
另一种是一个activity启动另个一activity传递数据,当另个一activity窗口关闭后,在传递数据到启动它的那个activity。
第一种传递方式(只是传递,不返回接收值):
Activity1传递参数:

 Intent intent=new Intent(FirstDemoActivity.this,SecondDemoActivity.class);                //可以把要传递的参数放到一个bundle里传递过去,bundle可以看做一个特殊的map.                Bundle bundle=new Bundle();                bundle.putString("result", "第一个activity的内容");                bundle.putString("content",content);                intent.putExtras(bundle);                //也可以用这种方式传递.                //intent.putExtra("result", "第一个activity的内容");                startActivity(intent); 

Activity2接受数据:

        Intent intent=getIntent();          String result=intent.getStringExtra("result");          String content=intent.getStringExtra("content");  

第二种专递方式(Activity1再次回来的时候接收到Activity2传递的值):
Activity1传递参数:

private void pickContact(){          Intent intent=new Intent(Intent.ACTION_PICK,ContactsContract.Contacts.CONTENT_URI);            //在这里也可以传递一些参数          //intent.putExtra(name, value)          //第二个参数就是onActivityResult 里得第一个参数。          startActivityForResult(intent,1);      }       //接收值    @Override      protected void onActivityResult(int requestCode, int resultCode, Intent data) {          // TODO Auto-generated method stub          if(resultCode==Activity.RESULT_OK && requestCode==1){              Cursor cusor=this.getContentResolver()                  .query(data.getData(), new String[]{ContactsContract.Contacts.DISPLAY_NAME},                          null, null, null);              if(cusor.moveToFirst()){                  String str=cusor.getString(cusor.getColumnIndex(ContactsContract.Contacts.DISPLAY_NAME));                  text.setText(str);              }          }      }  

来源: http://blog.csdn.net/wangkuifeng0118/article/details/7034967
其中设置返回参数的方式:

Intent intent = new Intent();intent.putExtra(..);context.setResult(RESULT_OK, intent); context.finish();

(5)权限
A.声明Activity权限(具有指定权限的组件才可调用)

<activity android:permission="cn.itcast.permission.secondwindow" /><receiver android:permission="cn.itcast.permission.secondwindow" />

B.定义并使用权限

<permission android:name="cn.itcast.permission.secondwindow" /><uses-permission android:name="cn.itcast.permission.secondwindow"/>

来源: http://www.linuxidc.com/Linux/2012-07/65298.htm

(6)Fragment衍生物
http://blog.csdn.net/lmj623565791/article/details/37970961

本文转自一下网站,内容更丰富,详细可阅读原文:
http://blog.csdn.net/hpoi/article/details/4629065(Activity的生命周期)

http://www.cnblogs.com/meizixiong/archive/2013/07/03/3170591.html(Activity的栈)

http://blog.csdn.net/wangkuifeng0118/article/details/7034967(activity传递参数)

更多相关文章

  1. android:launcherMode
  2. Android(安卓)framework 系统服务的启动流程
  3. Android启动画面
  4. Android(安卓)启动流程梳理
  5. Android属性之build.prop,及property_get/property_set
  6. Android(安卓)webkit 事件传递流程详解
  7. Android(安卓)SDK and AVD Manage图标没找到
  8. Android(安卓)实现发送短信demo
  9. Android获取开机启动程序列表

随机推荐

  1. Android日志系统Logcat源代码简要分析
  2. Android开发者的演示工具——asm.jar
  3. Android(安卓)lint 删除无用图片文件和配
  4. Android外派(安卓外派) — 长年提供安卓开
  5. Android的Activity屏幕切换动画(一)-左右
  6. android 笔记 --- 自定义Android主题风格
  7. 为Android加入busybox工具
  8. [Android实例] Android(安卓)开发者面试
  9. Android(安卓)L Developer Preview
  10. android 开发-数据存储之文件存储