组件之Activity详解

2017-07-11  本文已影响0人  kjy_112233

一、Activity详解

(1)Activity从创建到销毁的一个完整的生命周期,包含七种方法和四种状态。

生命周期.png
(2)Activity生命周期方法

(3)Activity状态

(4)Activity生命周期的各阶段

(5)Activity屏幕横竖屏切换分析

//获取屏幕的方向,数值1表示竖屏,数值2表示横屏
int screenNum = getResources().getConfiguration().orientation;
//设置屏幕横屏
setRequestedOrientation(ActivityInfo.SCREEN_ORIENTATION_LANDSCAPE);
//设置屏幕竖屏
setRequestedOrientation(ActivityInfo.SCREEN_ORIENTATION_PORTRAIT);
android:configChanges="orientation|keyboardHidden|screenSize"

(6)Activity优先级

(7)Activity界面跳转的实现

    private void start() {
        Intent intent = new Intent(MainActivity.this, AActivity.class);
        //无结果的界面跳转
        startActivity(intent);
        //有结果的界面跳转
        startActivityForResult(intent, 1000);
        //隐式启动界面
        /**
         * IntentFilter匹配规则
         * 一个intent只有同时匹配某个Activity的intent-filter中的action、category、data才算完全匹配,才能启动该Activity。
         * 一个Activity可以有多个intent-filter,一个intent只要成功匹配任意一组 intent-filter,就可以启动该Activity。
         * 在AndroidManifest.xml中设置intent-filter的的action、category、data
         * </intent-filter>
         *      <action android:name="amain_activity_action" />
         *      <category android:name="main_activity_category" />
         *      <data android:scheme="something" android:host="project.example.com" android:port="80"/>
         *      </intent-filter>
         * action匹配规则:系统也有预定义action也可以自定义action。如果采用自定的action那么在启动Activity的时候必须保证Intent中的action和intent-filter中的action完全一致
         * category匹配规则:系统默认给intent中的category添加属性值。除此之外有其他category,则要求intent中的category和intent-filter中的所有category 相同
         * data匹配规则:如果没有指定URI,默认值为content和file; 有多组data规则时,匹配其中一组即可。Uri的格式:scheme://host:port
         */
        Intent intent = new Intent("main_activity_action");
        intent.addCategory("main_activity_category");
        intent.setData(Uri.parse("something://project.example.com:80"));
        startActivity(intent);
    }

    //用方法setResult回传数据,用finish()结束AActivity页面的进程
    private void setResult() {
        Intent intent = new Intent();
        intent.putExtra("text", "text");
        setResult(1001, intent);
        finish();
    }

    //在MainActivity界面用方法onActivityResult接收回传数据
    @Override
    protected void onActivityResult(int requestCode, int resultCode, @Nullable Intent data) {
        super.onActivityResult(requestCode, resultCode, data);
        if (requestCode == 1000 && resultCode == 1001) {
            if (data != null) {
                String text = data.getStringExtra("text");
            }
        }
    }

(8)Activity四种启动模式

二、Activity的启动流程源码解析

上一篇下一篇

猜你喜欢

热点阅读