Android四大组建

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

  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值