活动启动模式

简介:

启动模式

1.standard

同一个页面可以打开多次
422101-20170904165419991-95304049.png

2.singleTop

打开页面直接处于栈顶
422101-20170904165427116-1632911475.png

3.singleTask

会保证页面只打开一次
422101-20170904165433538-850397664.png

4.singleInstance

开启新的栈
422101-20170904165439897-2000459359.png

获取当前活动技巧,

创建一个基础的类,

package activitytest.example.com.activitytest;

import android.os.Bundle;
import android.support.annotation.Nullable;
import android.support.v7.app.AppCompatActivity;
import android.util.Log;

/**
 * Created by DianDoDo on 2017/9/4.
 */

public class BaseActivity extends AppCompatActivity{
    private static final String TAG = "BaseActivity";
    @Override
    protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        Log.d(TAG,getClass().getSimpleName());
    }
}

其他的活动类,继承它,就可以在每次打开活动的时候,都能显示活动名称了

package activitytest.example.com.activitytest;

import android.net.Uri;
import android.support.v7.app.AppCompatActivity;
import android.os.Bundle;
import android.util.Log;
import android.view.Menu;
import android.view.MenuItem;
import android.view.View;
import android.widget.Toast;
import android.widget.Button; // 引入才可以操作Button
import android.content.Intent;

public class FirstActivity extends BaseActivity {
    private static final String TAG = "FirstActivity";

    @Override
    protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);

        Log.d(TAG,"Task id is" +getTaskId());

        setContentView(R.layout.first_layout); // 设置默认布局

        Button button1 = (Button) findViewById(R.id.button_1);
        button1.setOnClickListener(new View.OnClickListener() {
            @Override
            public void onClick(View v) {
                Intent intent = new Intent(FirstActivity.this,SecondActivity.class);
                startActivity(intent);
            }

        });

    }

    @Override
    protected void onActivityResult(int requestCode, int resultCode, Intent data) {
        switch (requestCode) {
            case 1:
                if (resultCode == RESULT_OK) {
                    String returnedData = data.getStringExtra("data_return");
                    Log.d("FirstActivity",returnedData);
                }
                break;
            default:
        }
    }

    @Override
    public boolean onCreateOptionsMenu(Menu menu) {
        getMenuInflater().inflate(R.menu.main,menu);
        return true;
    }

    @Override
    public boolean onOptionsItemSelected(MenuItem item) {
        switch (item.getItemId()) {
            case R.id.add_item:
                Toast.makeText(this,"You clicked Add",Toast.LENGTH_SHORT).show();
                break;
            case R.id.remove_item:
                Toast.makeText(this,"You clicked Remove",Toast.LENGTH_SHORT).show();
                break;
            default:
                break;
        }
        return true;
    }

    @Override
    protected void onRestart() {
        super.onRestart();
        Log.d(TAG,"onRestart");
    }
}

处理全部关闭

1.创建一个ActivityCollector类

package activitytest.example.com.activitytest;

import android.app.Activity;

import java.util.ArrayList;
import java.util.List;

/**
 * Created by DianDoDo on 2017/9/4.
 */

public class ActivityCollector {
    public static List<Activity> activities = new ArrayList<>();

    public static void addActivity(Activity activity) {
        activities.add(activity);
    }

    public static void removeActivity (Activity activity) {
        activities.remove(activity);
    }

    public static void finishAll() {
        for(Activity activity:activities) {
            if (!activity.isFinishing()) {
                activity.finish();
            }
        }
    }
}

2.在Base类中管理

package activitytest.example.com.activitytest;

import android.os.Bundle;
import android.support.annotation.Nullable;
import android.support.v7.app.AppCompatActivity;
import android.util.Log;

/**
 * Created by DianDoDo on 2017/9/4.
 */

public class BaseActivity extends AppCompatActivity{
    private static final String TAG = "BaseActivity";
    @Override
    protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        Log.d(TAG,getClass().getSimpleName());
        ActivityCollector.addActivity(this);
    }

    @Override
    protected void onDestroy() {
        super.onDestroy();
        ActivityCollector.removeActivity(this);
    }
}

3.活动中调用finishAll

package activitytest.example.com.activitytest;

import android.content.Intent;
import android.net.Uri;
import android.support.v7.app.AppCompatActivity;
import android.os.Bundle;
import android.util.Log;
import android.view.View;
import android.widget.Button;

public class ThirdActivity extends BaseActivity {
    private static final String TAG = "ThirdActivity";
    @Override
    protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        Log.d(TAG,"Task id is" +getTaskId());
        setContentView(R.layout.third_layout);

        Button button3 = (Button) findViewById(R.id.button_3);
        button3.setOnClickListener(new View.OnClickListener() {
            @Override
            public void onClick(View v) {
                ActivityCollector.finishAll();
            }

        });

    }
}

优化传参处理

SecondActivity 活动增加方法

public static void actionStart(Context context,String data1,String data2) {
        Intent intent = new Intent(context,SecondActivity.class);
        intent.putExtra("param1",data1);
        intent.putExtra("param2",data2);
        context.startActivity(intent);
    }

活动一中调用,

@Override
    protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);

        Log.d(TAG,"Task id is" +getTaskId());

        setContentView(R.layout.first_layout); // 设置默认布局

        Button button1 = (Button) findViewById(R.id.button_1);
        button1.setOnClickListener(new View.OnClickListener() {
            @Override
            public void onClick(View v) {
//                Intent intent = new Intent(FirstActivity.this,SecondActivity.class);
//                startActivity(intent);
                SecondActivity.actionStart(FirstActivity.this,"data1","data2");
            }

        });

    }

这样就可以方便的传参数了。



本文转自TBHacker博客园博客,原文链接:http://www.cnblogs.com/jiqing9006/p/7474407.html,如需转载请自行联系原作者

相关文章
|
7月前
TienChin 活动管理-设置活动的默认状态
TienChin 活动管理-设置活动的默认状态
21 0
|
3月前
|
Android开发
Activity启动模式完全解读-更新中
Activity启动模式完全解读-更新中
34 0
|
11月前
|
存储 Android开发
Activity的启动模式和启动流程
标准模式(standard) 栈顶复用模式(singleTop) 栈内复用模式(singleTask) 单例模式(singleInstance) 启动模式可在AndroidManifest.xml中,通过<activity>标签的android:launchMode属性设置。
|
Android开发
Android活动的启动模式简单介绍
Android活动的启动模式简单介绍
|
存储 Android开发
温故知新—Activity的五种启动模式
Activity的五种启动模式
149 0
温故知新—Activity的五种启动模式
|
XML 数据可视化 Java
探究活动Activity
探究活动Activity
探究活动Activity
|
Android开发 UED 开发者
探究活动Activity(2)界面跳转及生命周期
探究活动Activity(2)界面跳转及生命周期
235 0
探究活动Activity(2)界面跳转及生命周期
|
测试技术 Android开发
Activity的生命周期和启动模式
先上一张经典图片镇楼: 测试正常情况Activity生命周期的代码: public class MainActivity extends AppCompatActivity { @Override protected void onCreate(Bundle savedInstanceState) { super.
1214 0