Android四大组件之Activity

2023-03-25  本文已影响0人  南风知我咦

学习资料

简介

使用流程

创建

   <activity
            android:name=".fourassembly.activity.SplashActivity" //该Activity的实现类的名字
            android:exported="true"  //指定是否能被其他应用调用
            android:launchMode="singleInstance"> //启动模式
            <intent-filter>
                <action android:name="android.intent.action.MAIN" />
                <category android:name="android.intent.category.LAUNCHER" />
            </intent-filter>
        </activity>
        <activity android:name=".fourassembly.activity.MainActivity"/>
  <action android:name="android.intent.action.MAIN" />
  <category android:name="android.intent.category.LAUNCHER" />

启动

显示启动
    /**
     * 显示启动
     */
    private void visibilityJump(){
        Intent intent = new Intent(activityWeakReference.get(),SecondActivity.class);
        activityWeakReference.get().startActivity(intent);
    }

隐式启动
<activity
            android:exported="true"
            android:name=".fourassembly.activity.SecondActivity">
            <intent-filter>
                <category android:name="android.intent.category.DEFAULT"/>
                <category android:name="second_activity_category"/>
                <action android:name="SecondeActivity"/>
            </intent-filter>
        </activity>

    /**
     * 隐式启动
     */
    private void inVisibilityJump(){
        Intent intent = new Intent("SecondeActivity");
        activityWeakReference.get().startActivity(intent);
    }

默认启动
带返回值的启动
//MainActivity页面中的处理
/**
     * 带返回的跳转
     */
    private void jumpForResult(){
        Intent intent = new Intent(activityWeakReference.get(),SecondActivity.class);
        Intent intent2 = new Intent("SecondeActivity");
        activityWeakReference.get().startActivityForResult(intent, Constant.SECOND_ACTIVITY_RESULT_CODE);
    }

    /**
     * 重写返回处理的方法
     * @param requestCode The integer request code originally supplied to
     *                    startActivityForResult(), allowing you to identify who this
     *                    result came from.
     * @param resultCode The integer result code returned by the child activity
     *                   through its setResult().
     * @param data An Intent, which can return result data to the caller
     *               (various data can be attached to Intent "extras").
     *
     */
    @Override
    protected void onActivityResult(int requestCode, int resultCode, @Nullable Intent data) {
        super.onActivityResult(requestCode, resultCode, data);
        if (requestCode ==  Constant.SECOND_ACTIVITY_RESULT_CODE){
            String back_data = data.getStringExtra("SECOND_BACK_DATA");
            Log.d(TAG,back_data);
        }
    }
//SecondActivity中设置返回
    private void initView() {
        TextView textView = findViewById(R.id.tv_name);
        textView.setOnClickListener(new View.OnClickListener() {
            @Override
            public void onClick(View v) {
                Intent data = new Intent();
                data.putExtra("SECOND_BACK_DATA","你好,我是第二个页面");
                setResult( Constant.SECOND_ACTIVITY_RESULT_CODE,data);
                finish();
            }
        });
    }
带传入数据Bundle的启动
//MainActivity设置要传入的数据。
    /**
     * 带传入数据的跳转
     */
    private void jumpWithBundleData(){
        Intent intent = new Intent(activityWeakReference.get(),SecondActivity.class);
        Bundle bundle = new Bundle();
        bundle.putString("DATA_FROM_MAIN","你好,我是主页");
        intent.putExtras(bundle);
        intent.putExtra("MAIN_NAME","MainActivity");
        activityWeakReference.get().startActivity(intent);
    }
//SecondeActivity中处理数据
private void initBundleData() {
        Intent intent = getIntent();
        if (intent!=null){
            Bundle bundle = intent.getExtras();
            String info = bundle.getString("DATA_FROM_MAIN");
            String name = intent.getStringExtra("MAIN_NAME");

            Log.d(TAG,info);
            Log.d(TAG,name);
        }
    }

生命周期

onCreate
onRestart
onStart
onResume
onPause
onStop
onDestory

Activity启动模式

Standard
SingTop (栈顶复用模式)
SingTask(栈内复用模式)
SingleInstance(单一实例模式)
使用
 <activity
            android:name=".fourassembly.activity.SplashActivity"
            android:exported="true"
            android:launchMode="singleInstance">
            <intent-filter>
                <action android:name="android.intent.action.MAIN" />
                <category android:name="android.intent.category.LAUNCHER" />
            </intent-filter>
        </activity>
  /**
     * 设置启动模式的启动
     */
    private void setStartMode(){
        Intent intent = new Intent("SecondeActivity");
        intent.setFlags(Intent.FLAG_ACTIVITY_SINGLE_TOP);//栈顶复用
        activityWeakReference.get().startActivity(intent);
    }
//使用一个新的Task来启动Activity,但每个Activity都将在一个新的Task中。
Intent.FLAG_ACTIVITY_NEW_TASK   
//使用singleTop模式来启动一个Activity。  
Intent.FLAG_ACTIVITY_SINGLE_TOP  
//使用singleTask模式来启动一个Activity。
Intent.FLAG_ACTIVITY_CLEAR_TOP
//使用singleTask模式来启动一个Activity,使用这种方式启动Activity,当Activity启动其他Activity的时候,该Activity会被销毁,不入栈。  
Intent.FLAG_ACTIVITY_NO_HISTORY
//方式无法指定 SingleInstance 模式,SingleInstances 只能在 AndroidManifest.xml 中声明。
Intent.setFlags
上一篇 下一篇

猜你喜欢

热点阅读