Activity的状态保存与Intent介绍

来源:互联网 发布:淘宝代销怎么上架 编辑:程序博客网 时间:2024/05/16 11:43

Activity的状态保存

我们开发中有时候会遇到一些情况,当系统内存不足时,我们处于onPause()和onStop的activity实例会被回收,但是我们的activity状态信息并没有保存,那么我们得怎么做呢?

Google为我们提供了onSaveInstanceState(Bundle bundle)方法,bundle参数用于存储需要保存的数据,然后可以在onCreate方法里接受之前保存的数据。我们通过执行一次横竖屏切换destory当前的activity来打印Log验证

public class MainActivity extends AppCompatActivity {    private String TAG = "save";    @Override    protected void onCreate(Bundle savedInstanceState) {        super.onCreate(savedInstanceState);        setContentView(R.layout.activity_main);        if (savedInstanceState!=null){            Log.i("save", "" + savedInstanceState.getBoolean("isStore"));        }    }        @Override    protected void onSaveInstanceState(Bundle outState) {        super.onSaveInstanceState(outState);        outState.putBoolean("isStore", true);    }}

根据google官方的说明,有时候onSaveInstance是不会被回调的,比如用户点击back按钮,用户本身就是想关闭这个activity,所以是不需要保存状态的。

如果想要回调onSaveInstance,最后在onStop和onPause之前。当然google也提到只要给UI控件指定一个唯一id,控件的状态也是可以保存的,例如EditeText的输入内容,CheckBox的选择状态,这些都是不需要用onSaveInstance去保存的。那么,onSaveInstance的基本用法就是这样了。


Intent的介绍以及简单使用

Intent作为一个消息对象,用来连接四大组件之间,是四大组件之间的纽带。
Intent可以开启服务广播之类的就不再赘述了,下面主要探讨下Intent的各个属性的使用。
1)Component name
我们先来看看它的用法:
从参数我们可以看到可以传包名,Class对象等,基本用法大同小异。这与我们平时启动activity功能没什么两样,但是我们可以通过这种方式启动其他应用的activity。当然如果我们启动的别的应用的activity不是入口activity的话,我们还需要在配置android:exported= true;

2)Action和Category

通常我们在使用广播的时候,经常用到action,用来指定接收什么样的广播。而在activity中使用的时候,action通常用来作隐式启动,通过在manifest文件中配置使用,而action通常是与category配套使用的,当多个activity配置了同一个action的话。会出现下图情况:
因为我们配置相同的action,所以启动的时候,出现了这种情况,那么我是否也可以联想到,平时我们打开一个txt文档,会出现多个阅读app选中,那么他们肯定也是配置了同一个action。
3)Data和Type
通过指定数据格式进行不同操作,谷歌官方文档说明指定不同uri使用setData()方法,指定mime类型使用setType()方法,如果你想都使用,请不要分别调用这两个方法,而是直接使用setDataAndType()方法。下面是例子
        //setData        Intent intent = new Intent();        intent.setData(Uri.parse("tel:15656312312"));        startActivity(intent);        //setType        intent.setType("image/*");        //setDataAndType        intent.setDataAndType(Uri.parse("http://www.baidu.com/fadf.jpg"),"image/*");
4)Extra
这个平时我们开发用的最多,基本就是在Intent传递时,附带我们要携带的数据。说白了就是传值。
5)Flag
可以给Intent添加不同的flag设置activity的启动模式,以及一些功能,告诉系统如何启动activity。

上述基本就是Intent的基本属性以及功能,如有错误希望各位大神指点,感激不尽。

1 0
原创粉丝点击