Android之何时调用onNewIntent方法

本文深入探讨了Android应用中Activity的四种启动模式:默认、singleTop、singleTask和singleInstance,重点解释了当启动模式设置为singleTop或singleTask时,系统如何处理栈顶实例,并详细介绍了onNewIntent方法的调用机制。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

我们知道Activity的启动模式有四种:

分别是默认的方式,singleTop,singleTask,singleInstance。

onNewIntent方法的调用和singleTop或者singleTask有关。

当启动模式为singleTop的时候,android系统会先检查栈顶的实例是不是该Activity的实例,如果不是的话,它会创建一个该Activity的实例,并启动onCreate函数。如果栈顶已经存在该实例,则不会再创建该Activity的实例,而且不会执行onCreate函数,而是执行onNewIntent函数来重新启动已经存在的实例。

同理,当启动模式为singleTask的时候,若栈顶不是该Activity的实例的时候,系统会在栈中寻找是否存在这个实例,如存在的话就会把这个实例放在栈顶,并把它之前的实例清除掉。但如果栈顶已经是这个实例的话,就会执行onNewIntent函数。道理和singleTop一样。

关键在于这个Activity的实例在不在当前的栈顶。

package com.example.onnewintentdemo;

import android.app.Activity;
import android.content.Intent;
import android.os.Bundle;
import android.view.View;
import android.view.View.OnClickListener;
import android.widget.Button;
import android.widget.Toast;

public class MainActivity extends Activity {
	private Button button;

	@Override
	protected void onCreate(Bundle savedInstanceState) {
		super.onCreate(savedInstanceState);
		setContentView(R.layout.activity_main);
		initView();
	}

	private void initView() {
		// TODO Auto-generated method stub
		button = (Button) findViewById(R.id.btn1);
		button.setOnClickListener(new OnClickListener() {

			@Override
			public void onClick(View v) {
				// TODO Auto-generated method stub
				Intent intent = new Intent(MainActivity.this, MainActivity.class);
				intent.setFlags(Intent.FLAG_ACTIVITY_SINGLE_TOP);
				startActivity(intent);
			}
		});

	}

	@Override
	protected void onNewIntent(Intent intent) {
		// TODO Auto-generated method stub
		super.onNewIntent(intent);
		Toast.makeText(this, "onNewIntent", Toast.LENGTH_SHORT).show();
	}
}


评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值