天天看点

退出所有activity之三

随时随地阅读更多技术实战干货,获取项目源码、学习资料,请关注源代码社区公众号(ydmsq666)、QQ技术交流群(183198395)。

退出所有activity之三
退出所有activity之三
退出所有activity之三

在监听返回键并退出所有Activity示例和在一个Activity中关闭所有Activity两篇文章分别介绍了两种方式去结束所有activity,一种方式是把所有activity实例放入一个集合中,退出时遍历逐个退出,另一种方式是在启动时开启一个空白的activity专门去处理结束逻辑。这里再介绍一种方式,即把第一个MainActivity当成之前的空白activity,把MainActivity启动模式设置成singleTop,那么从最后一个activity调回MainActivity时,会回调onNewIntent方法,在这里去结束自身。

MainActivity:

package com.home.closeallactivity;

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.LinearLayout;

public class MainActivity extends Activity {

	@Override
	protected void onCreate(Bundle savedInstanceState) {
		super.onCreate(savedInstanceState);
		LinearLayout layout = new LinearLayout(this);
		Button btn = new Button(this);
		btn.setText("跳转到B");
		layout.addView(btn);
		setContentView(layout);
		btn.setOnClickListener(new OnClickListener() {

			@Override
			public void onClick(View v) {
				Intent intent = new Intent(MainActivity.this, ActivityB.class);
				startActivity(intent);
			}
		});

	}

	@Override
	protected void onNewIntent(Intent intent) {
		super.onNewIntent(intent);
		if ((Intent.FLAG_ACTIVITY_CLEAR_TOP & intent.getFlags()) != 0) {
			finish();// 退出自身
		}
	}
}
           

ActivityB:

package com.home.closeallactivity;

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.LinearLayout;

public class ActivityB extends Activity {
	@Override
	protected void onCreate(Bundle savedInstanceState) {
		super.onCreate(savedInstanceState);
		LinearLayout layout = new LinearLayout(this);
		Button btn = new Button(this);
		btn.setText("跳转到C");
		layout.addView(btn);
		setContentView(layout);

		btn.setOnClickListener(new OnClickListener() {

			@Override
			public void onClick(View v) {
				Intent intent = new Intent(ActivityB.this, ActivityC.class);
				startActivity(intent);
			}
		});
	}
}
           

ActivityC:

package com.home.closeallactivity;

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.LinearLayout;

public class ActivityC extends Activity {
	@Override
	protected void onCreate(Bundle savedInstanceState) {
		super.onCreate(savedInstanceState);
		LinearLayout layout = new LinearLayout(this);
		Button btn = new Button(this);
		btn.setText("退出程序");
		layout.addView(btn);
		setContentView(layout);

		btn.setOnClickListener(new OnClickListener() {

			@Override
			public void onClick(View v) {
				Intent intent = new Intent(ActivityC.this, MainActivity.class);
				// 不再重新启动这个Activity的实例,而且这个Activity上方的所有Activity都将关闭,
				// 然后这个Intent会作为一个新的Intent投递到老的Activity(现在位于顶端)中。
				intent.setFlags(Intent.FLAG_ACTIVITY_CLEAR_TOP);
				startActivity(intent);
			}
		});

	}
}
           

记得要把MainActivity的launchMode设置为singleTop哦!