随时随地阅读更多技术实战干货,获取项目源码、学习资料,请关注源代码社区公众号(ydmsq666)、QQ技术交流群(183198395)。
在监听返回键并退出所有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哦!