Android Activity基础知识

一、Activity的生命周期

Activity生命周期中有4种状态:

运行状态: 活动位于返回栈的栈顶时,可以和用户进行交互。

暂停状态: 活动不在处于栈顶位置,但仍然可见,比如栈顶是个对话框形式的活动没有占满整个屏幕。

停止状态: 活动不在处于栈顶位置,并且完全不可见的时候。

销毁状态: 活动从返回栈中移除后。

系统保证内存充足会回收Activity占用的资源,必被回收的是销毁状态的Activity,当其他地方需要内存时停止状态的Activity也有可能会被回收,只有在内存极低的情况下,才会考虑回收暂停状态下的Activity。

Activity类在生命周期的环节中定义了7个回调方法。

onCreate():活动第一次被创建的时候调用。应该在此方法中完成初始化操作,比如加载布局,绑定事件等。

onStart():活动由不可见变为可见时调用。

onResume():活动准备好和用户进行交互时调用。此时活动一定位于栈顶,并且处于运行状态。

onPause():系统准备去启动或恢复另一个活动时调用。应该在此方法中释放没用的资源以及保存关键数据。

onStop():活动完全不可见的时候调用。当启动的活动是对话框时onPause()会执行,onStop()不执行。
onDestroy():活动要被销毁时调用。

onRestart():活动由停止状态变为运行状态之前调用。也就是活动被重新调用了。

resume [rɪˈzjuːm] (中断后)继续
pause [pɔːz] 暂停
destroy [dɪˈstrɔɪ] 毁灭;销毁

Activity生命周期

二、onSaveInstanceState()保存数据

活动进入停止状态后被系统回收,如果再返回此活动,不会执行onRestart()方法,而是执行onCreate()重新创建一次。为了防止被回收后数据丢失,Activity提供了onSaveInstanceState()回调方法。

被回收时保存数据:

    @Override
    protected void onSaveInstanceState(@NonNull Bundle outState) {
        super.onSaveInstanceState(outState);
        String data = "Save important data";
        outState.putString("data_key", data);
    }

下次重新创建的时候在onCreate()中恢复数据:

    @Override
    protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.activity_main);
        if (savedInstanceState != null) {
            String data = savedInstanceState.getString("data_key");
        }
	}

三、Activity的启动模式

启动模式共4种

standard: 每次启动都会创建该活动的一个新的实例。默认的启动模式,在未指定的情况下自动使用这个启动模式。

singleTop: 启动时如果返回栈的栈顶是该活动直接使用,不会创建新的活动示例。

singleTask: 启动时如果返回栈中有该活动直接使用,并且把这个活动之上的所有活动全部出栈。

singleInstance: 直接启用一个新的返回栈来管理这个活动。目的是允许其他程序调用这个活动,解决不同程序间共享活动的问题。点击返回键时一个返回栈空了才会显示另一个返回栈。

standard [ˈstændəd] 标准;规范
single [ˈsɪŋɡl] 单个的
instance [ˈɪnstəns] 例子;实例

使用

	<activity 
		android:name=".OneActivity"
	    android:launchMode="singleTask" />

在 AndroidManifest.xml中通过给<activity> 标签指定android:launchMode属性来选择启动模式。

四、显式Intent和隐式Intnet

Intent是Android程序中各组件之间进行交互的一种重要方式,它不仅可以指明当前组件想要执行的动作,还可以在不同的组件之间传递数据。

intent [ɪnˈtent] 意图;目的

种类: 显式Intent和隐式Intent

显式Intent

示例

Intent intent = new Intent(OneActivity.this, TwoActivity.class);
startActivity(intent);

指名道姓,意图明显。

隐式Intent

category [ˈkætəɡəri] 类别;种类
filter [ˈfɪltə(r)] 过滤;过滤器
scheme [skiːm] 方案;计谋

隐式Intent并不明确指出我们想要启动哪一个活动,而是指定了一系列更为抽象的aciton和category等信息。

示例:

	<activity android:name=".TwoActivity">
		<intent-filter>
			<action android:name="com.test.ACTION_START"/>
			<category android:name="com.test.CATEGORY_TWO"/>
		<intent-filter/>
	<activity/>
	Intent intent = new Intent("com.test.ACTION_START");
	intent.addCategory("com.test.CATEGORY_TWO");
	startActivity(intent);

隐式Intent可以启动其他程序的活动

	//启动系统浏览器
	Intent intent = new Intent(Intent.ACTION_VIEW);
	intent.setData(Uri.parse("http://www.baidu.com"));
	startActivity(intent);

	//启动拨号界面
	Intent intent = new Intent(Intent.ACTION_DIAL);
	intent.setData(Uri.parse("tel:10086"));
	startActivity(intent);

setData() 用于指定当前Intent正在操作的数据

也可以自定义响应某些操作,比如想浏览器一样响应一个打开网页的Intent

	<activity android:name=".MYWebActivity">
	    <intent-filter tools:ignore="AppLinkUrlError">
	        <action android:name="android.intent.action.VIEW"/>
	        <category android:name="android.intent.category.DEFAULT"/>
	        <data android:scheme="http"/>
	    </intent-filter>
	</activity>

<data>标签中通过android:scheme指定了数据必须是http协议,这样有打开网页的操作,系统就会列表显示浏览器或者此应用供选择。

应用选择列表

隐式Intent作用: 使Android多个应用程序之间的功能可以共享使用。

end

  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值