Android四大应用组件之Activity

一、Activity定义

    1、Activity, 直译为活动, 它是Android定义的四大应用组件之一,也是最重要用得最多的.

  2、Activity用来提供一个能让用户操作并与只交互的界面

  3、一个应用界面可以包含多个Activity

二、生命周期以及方法

  1、在Android中,Activity是所有程序的根本,所有程序的流程都运行在Activity之中,Activity具有自己的生命周期,,由系统控制生命周期,程序无法改变,但可以用onSaveInstanceState保存其状态

  

   2、Activity中的方法以及使用方法:

      1)方法:

        1、startActivity(Intent intent): 一般启动

        2、startActivityForResult(int reqCode, Intent intent): 带回调启动

        3、onActivityResult(int reqCode, int resultCode, Intent data): 回调方法

        4、setResult(int resultCode, Intent data): 设置要返回的结果

        5、finish(): 结束当前

        6、Activity getIntent(): 得到启动Activity的意图

      Activity的使用需要在Manifest文件中添加相应的<Activity>,并设置其属性和intent-filter。

      2)用法:

        1、定义

          定义一个类extends Activity,并重写生命周期方法

          在功能清单文件中使用<activity>注册

        2、启动

          一般 startActivity(Intent intent)

          带回调启动:startActivityForResult(Intent intent,int requestCode)

            重写onActivityResult(int requestCode,int resultCode,Intent data)

        3、结束

          一般:finish()

           带结果的:setResult(int resultCode,Intent data)

   3、其生命周期函数有:   

          onCreate()

          onStart()

          onResume()

          onPause()

          onRestart()

          onStop()

          onDestory()

    4、Activity的四种状态

          运行状态: 可见也可操作

          暂停状态: 可见但不可操作

          停止状态: 不可见,但对象存在

          死亡状态: 对象不存在

 二、Intent

  1、Intent的理解

    1)Intent直意为意图,也就是你想要做什么或想要去哪

    2)Intent是Activity, Service和BroadcastReceiver这三个应用组件之间进行通信的信使

    3)Intent是可以携带数据的

    4)要在Activity中启动另一个Actvity, 就必须使用Intent对象

    注意:Intent不是四大组件之一

  2、Intent分类

    1)显示意图:明确指定目标组件的意图

       创建对象:Intent(Context context, Class clazz)

       何时使用 : 当操作当前自己应用的组件时使用

    2)隐式意图:没有明确指定目标组件的意图

       创建对象:Intent(String action)//于Acityity中<intent-filter>的action匹配

       何时使用 : 当操作其它应用的组件时使用

    3)携带数据:

      额外数据:putExtra(String key,Xxx value); 内部用map容器保存

      有特定前缀:setData(Uri data)//setData(Uri.parse("tel:"+内容))

    4)读取数据

      额外数据:Xxx getXxxExtra(String key)

      有特定前缀:Uri getData()

  3、Intent中的方法

       1)Intent(Context packageContext, Class<?> cls) : 用于创建显示意图对象

       2)Intent(String action): 用于创建隐式意图对象

       3)putExtra(String name, Xxx value): 保存额外数据

       4)Xxx getXxxExtra(String name): 获取额外数据

       5)setData(Uri data): 设置有特定格式的uri数据

三、IntentFilter  

   1、IntentFilter的理解

    1)在配置Activity时, 可以为Activity指定一个IntentFilter的配置

    2)如果你的Activity希望其它应用能访问到, 需要配置<intent-filter>

    3)如果你想启动其它应用的界面你必须用隐式intent, 且目标界面Activty配置了<intent-filter>

    4)它的作用类似于web中的为Servlet配置的<url-pattern>

 <application
        android:allowBackup="true"
        android:icon="@drawable/ic_launcher"
        android:label="@string/app_name"
        android:theme="@style/AppTheme" >
        <activity
            android:name=".MainActivity"
            android:label="@string/app_name" >
            <intent-filter>//配置IntentFilter
                <action android:name="android.intent.action.MAIN" />
                <category android:name="android.intent.category.LAUNCHER" />
            </intent-filter>
        </activity>
        <activity//配置Activity
            android:name=".SecondActivity"
            android:label="@string/title_activity_second" >
        </activity>
    </application>

    Activity实例(通过界面一启动界面二)

public class MainActivity extends Activity implements OnClickListener {
    //定义视图对象
    private EditText edtext;
    private Button btn1;
    private Button btn2;
    @Override
    protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.activity_main);
        //初始化视图
        edtext = (EditText)findViewById(R.id.edtext);
        btn1 = (Button)findViewById(R.id.btn1);
        btn2 = (Button)findViewById(R.id.btn2);
        //设置监听
        btn1.setOnClickListener(this);
        btn2.setOnClickListener(this);
    }
    @Override
    public void onClick(View v) {//v就是发生事件的视图对象(操作)
        if(v==btn1){
            //得到intent对象
            Intent intent = new Intent(this,SecondActivity.class);
            //同过intent携带额外数据
            String message = edtext.getText().toString();
            intent.putExtra("MESSAGE",message);
            //启动activity
            startActivity(intent);
        }else if(v==btn2){
            //得到intent对象(显示)
            Intent intent = new Intent(this,SecondActivity.class);
            //通过intent携带额外数据
            String message = edtext.getText().toString();
            intent.putExtra("MESSAGE",message);
            //带回调启动Activity
            int requestCode = 1;//请求码
            startActivityForResult(intent, requestCode);
        }
    }
    @Override
    protected void onActivityResult(int requestCode, int resultCode, Intent data) {
        //判断Code
        if(requestCode==1 && resultCode==2){
            //从data中取出数据
            String result = data.getStringExtra("RESULT");
            //显示数据
            edtext.setText(result);
        }
    }
}
public class SecondActivity extends Activity {
    //定义视图对象
    private EditText second_edtext;
    @Override
    protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.activity_second);
        //初始化视图对象
        second_edtext=(EditText)findViewById(R.id.second_edtext);
        //获取意图
        Intent intent = getIntent();
        //获取intent携带的参数
        String message = intent.getStringExtra("MESSAGE");
        second_edtext.setText(message) ;
    }
    public void back1(View v){
        //关闭当前界面
        finish();
    }
    public void back2(View v){
        //保存一个结果
        int resultCode = 2;//结果码
        //准备一个额外数据的intent对象
        Intent data = new Intent();
        String result = second_edtext.getText().toString();
        data.putExtra("RESULT", result);
        //设置结果
        setResult(resultCode,data);
        //关闭当前界面
        finish();
    }
}

  

  程序效果(一般返回)

   

    带参返回

   

    

原文地址:https://www.cnblogs.com/rivercast/p/6073497.html