android学习日记4 -- 活动的生存期

返回栈

Android中的活动是栈式管理(Task)的,每启动一个新活动,就会将新活动入栈,按back键又会销毁最上面的活动,而Android显示的活动就是栈顶活动。
在这里插入图片描述

关于生存期的回调方法

onCreate()
onStart()
onResume()
onPause()
onStop()
onDestroy()
onRestart()
可以在类中重写这些方法。
在这里插入图片描述

活动被系统回收的处理方式

重写活动的onSaveInstanceState方法,将数据保存到Bundle里.

@Override
protected void onSaveInstanceState(Bundle outState)
{
    super.onSaveInstanceState(outState);
    String tmpdata = "要保存的东西";
    outState.putString("data_key", tmpdata);	//设定数据的键值
}

这样,在活动再次创建时,便可从Bundle参数中获取数据了。

@Override
 protected void onCreate(Bundle savedInstanceState)
{
    super.onCreate(savedInstanceState);
    setContentView(R.layout.activity_main);
    if(savedInstanceState != null)
    {
        String tmp = savedInstanceState.getString("data_key"); //根据键值获取数据
        Log.e(TAG, tmp);
    }
}

活动的启动模式

standard

默认的启动模式,每当启动一个活动,它就会在返回栈中入栈,并处于栈顶位置。因此栈顶可能会有好几个相同的活动。
在这里插入图片描述

singleTop

在启动活动时发现栈顶已有该活动时不会创建新活动。
但是它只检查栈顶。
在这里插入图片描述

singleTask

这种模式会检查整个返回栈,如果发现要创建的活动已存在,则会把这个活动之上的所有活动通通出栈。
在这里插入图片描述

singleInstance

这种模式会启用一个新的返回栈来管理这个活动,这样其它的应用程序就可以共同来访问这个活动。
但是按back键可能会有意外的结果:
在这里插入图片描述

修改启动模式

在AndroidManifest.xml中修改:

<activity
	android:launchMode="singleTop">
</activity>

自己管理活动

这是在另一个文件中定义的类,用于管理活动。
这样,你就可以按自己的需求停止活动了。

import android.app.Activity;
import java.util.ArrayList;
import java.util.List;

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();
            }
        }
    }
}

为了配合这个类,在活动中应该这样写:

@Override
protected void onCreate(Bundle savedInstanceState)
{
    super.onCreate(savedInstanceState);
    setContentView(R.layout.activity_main);
    ActivityCollector.addActivity(this);
    //...
}

@Override
protected void onDestroy()
{
    super.onDestroy();
    ActivityCollector.removeActivity(this);
}
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值