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传递参数)