zoukankan      html  css  js  c++  java
  • 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();
        }
    }

      

      程序效果(一般返回)

       

        带参返回

       

        

  • 相关阅读:
    BoundsChecker使用
    完成端口(Completion Port)详解
    VC内存泄露检查工具:VisualLeakDetector
    AcceptEx函数与完成端口的结合使用例子
    IOCP之accept、AcceptEx、WSAAccept的区别
    Visual C++ 6.0安装
    eclipse中在线安装FindBugs
    几种开源SIP协议栈对比
    全情投入是做好工作的基础——Leo鉴书39
    CheckStyle检查项目分布图
  • 原文地址:https://www.cnblogs.com/rivercast/p/6073497.html
Copyright © 2011-2022 走看看