我正在开发我希望在按钮点击时关闭整个应用程序的应用程序。我知道在android中我们不应该考虑关闭应用程序,因为android会自动从Is quitting an application frowned upon?执行此操作。但我想关闭我的申请。
所以我正在做什么来关闭应用程序是我使用Intent.FLAG_ACTIVITY_CLEAR_TOP
标志来删除活动堆栈。
Intent intent = new Intent(Activity3.this, FinishActivity.class);
intent.setFlags(Intent.FLAG_ACTIVITY_CLEAR_TOP);
startActivity(intent);
finish();
在FinishActivity.class
的onCreate中,我正在调用this.finish()
,但应用程序未关闭,之前的活动将重新打开。
FinishActivity.class
@Override
protected void onCreate(Bundle savedInstanceState) {
// TODO Auto-generated method stub
super.onCreate(savedInstanceState);
this.finish();
}
更新:
这是方案
MainActivity->Activity2->Activity3->FinishActivity
完成活动后,Activity2
会在此处打开。
我如何实现这一目标?任何想法和建议将不胜感激。
谢谢&此致
答案 0 :(得分:31)
试一试。这应该清除你的活动堆栈。
Intent i = new Intent(this,MyActivity.class);
i.addFlags(Intent.FLAG_ACTIVITY_CLEAR_TASK);
i.addFlags(Intent.FLAG_ACTIVITY_NEW_TASK);
startActivity(i);
答案 1 :(得分:19)
使用此 -
Intent intent = new Intent(Activity3.this, FinishActivity.class);
intent.addFlags(Intent.FLAG_ACTIVITY_CLEAR_TOP |
Intent.FLAG_ACTIVITY_NEW_TASK);
intent.addFlags(Intent.FLAG_ACTIVITY_NO_HISTORY);
startActivity(intent);
finish();
已编辑 - 新答案,可以完美运作..
举一个例子......相应地做你的项目需要 -
我正在服用三个Activity
A,B和C类。我在C类活动的视图上应用了一个关闭按钮。如果你想通过后退按钮然后你可以转到上一个活动,当你按下关闭按钮然后你将退出应用程序..看看 -
public class AActivity extends Activity {
/** Called when the activity is first created. */
@Override
public void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.main);
Intent i = new Intent(this, B.class);
startActivityForResult(i, 1);
}
@Override
protected void onActivityResult(final int requestCode,
final int resultCode, final Intent intent) {
super.onActivityResult(requestCode, resultCode, intent);
if (resultCode == 5) {
finish();
}
}
}
参加下一堂课活动 -
public class B extends Activity {
/** Called when the activity is first created. */
@Override
public void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.b);
Intent i = new Intent(this, C.class);
startActivityForResult(i, 2);
}
@Override
protected void onActivityResult(final int requestCode,
final int resultCode, final Intent intent) {
super.onActivityResult(requestCode, resultCode, intent);
if (resultCode == 5) {
setResult(5);
finish();
}
}
}
参加上一次活动 -
public class C extends Activity {
/** Called when the activity is first created. */
@Override
public void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.c);
}
// close button..set by xml view..you can set it by button listener.
public void close(View v) {
setResult(5);
finish();
}
}
希望它可以解决你的问题......工人!
答案 2 :(得分:18)
这最终在100%的时间里对我有用。我独立尝试了所有标志,从未适用于所有代码实例。使用我想要这个功能的所有标志,大约5个不同的地方,现在它可以工作。
Intent intent = new Intent(actvSignIn.this, actvNearbyPlaces.class);
intent.addFlags(Intent.FLAG_ACTIVITY_CLEAR_TOP | Intent.FLAG_ACTIVITY_NEW_TASK);
intent.addFlags(Intent.FLAG_ACTIVITY_CLEAR_TASK);
startActivity(intent);
finish();
答案 3 :(得分:4)
来自Intent.FLAG_ACTIVITY_CLEAR_TOP
如果已设置,并且正在启动的活动已在当前任务中运行,则不会启动该活动的新实例,而是将关闭其上的所有其他活动,并将此Intent传递给(现在在最前面)作为新意图的旧活动。
为了让它工作,你的FinishActivity
必须是你的Activity堆栈中的第一个。在任何其他情况下,此解决方案不会给你任何东西。
您必须执行以下几个步骤来执行此操作:
1)将FinishActivity
作为您的启动器活动。
2)不要为其提供任何视图,并直接从Activity
回调中首先onCreate
启动您的应用:
3)重新定义onRestart
回调:
代码示例:
private boolean isNeedToContinue = true;
@Override
protected void onCreate(Bundle arg0) {
super.onCreate(arg0);
}
@Override
protected void onResume() {
super.onResume();
if (isNeedToContinue) {
startActivity(new Intent(this,FirstVisibleActivity.class));
isNeedToContinue = false;
} else {
finish();
}
}
@Override
protected void onRestart() {
super.onRestart();
finish();
isNeedToContinue = false;
}
我想这就是你所需要的。祝你好运!
答案 4 :(得分:3)
setFlags(Intent.FLAG_ACTIVITY_NEW_TASK | Intent.FLAG_ACTIVITY_CLEAR_TOP);
除了在xml的FinishActivity定义中将launchMode设置为“singleTop”之外, 覆盖onNewIntent方法,你可以传递一些额外的信息作为意图的一部分,在onCreate中完成你的活动,根据来自调用活动的一些信号在onNewIntent活动方法中完成它,或者根据你的需要简单地完成它。 也许你的其他活动可能有不同的lauchmodes,这就是为什么他们没有完成。
答案 5 :(得分:1)
这对我有用:
Intent intent = new Intent(Activity3.this, FinishActivity.class);
intent.addFlags(Intent.FLAG_ACTIVITY_CLEAR_TASK | Intent.FLAG_ACTIVITY_NEW_TASK);
startActivity(intent);
finish();
答案 6 :(得分:1)
正如其他答案一样,以下内容应该有效。
<div ng-repeat="review in reviews">
<h1>Review {{ review.title }}</h1>
<div class="reviewRatings">
<div ng-repeat="rating in review.rating">
<p>{{ rating.property }} - {{ rating.value }}<p>
</div>
</div>
</div>
对于API级别&lt; 11,Intent intent = new Intent(Activity3.this, FinishActivity.class);
intent.addFlags(Intent.FLAG_ACTIVITY_CLEAR_TOP | Intent.FLAG_ACTIVITY_NEW_TASK);
intent.addFlags(Intent.FLAG_ACTIVITY_CLEAR_TASK);
不可用。相反,我使用了支持库中的Intent.FLAG_ACTIVITY_CLEAR_TASK
。
请参阅IntentCompat
可能会帮助某人绊倒。
答案 7 :(得分:0)
尝试这样一来这对我有用:
Intent intent = new Intent(Activity3.this, FinishActivity.class);
intent.addFlags(android.content.Intent.FLAG_ACTIVITY_CLEAR_TOP);
startActivity(intent);
finish();
代替你的代码
Intent intent = new Intent(Activity3.this, FinishActivity.class);
intent.setFlags(Intent.FLAG_ACTIVITY_CLEAR_TOP);
startActivity(intent);
finish();
答案 8 :(得分:0)
试试这个:
Intent intent = new Intent(Activity3.this, FinishActivity.class);
intent.addFlags(Intent.FLAG_ACTIVITY_CLEAR_TOP | Intent.FLAG_ACTIVITY_NEW_TASK);
startActivity(intent);
finish();
答案 9 :(得分:0)
您还可以在上一个活动中使用finishAffinity()
函数,例如:
finishAffinity()
startHomeActivity()
希望它会有用。