可以将文章内容翻译成中文,广告屏蔽插件可能会导致该功能失效(如失效,请关闭广告屏蔽插件后再试):
问题:
I am sure this question has been asked number of times because I read a few. My client wants me to put a button into his app where users can click and exit. I have read this and found calling finish()
will do it. But, finish is only closing the current running activity right? I have lot of activities so in this case I have to pass each and every activity's instance and finish them or make every activity into Singleton pattern.
I also got to know Activity.moveTaskToBack(true)
can get you into the home screen. OK, this is not closing but backgrounding the process. So is this is effective?
Which method should I use to close the app completely? Any of above described or any other method/other usage of above methods?
回答1:
Actually every one is looking for closing the application on an onclick event, wherever may be activity....
So guys friends try this code. Put this code on the onclick event
Intent homeIntent = new Intent(Intent.ACTION_MAIN);
homeIntent.addCategory( Intent.CATEGORY_HOME );
homeIntent.setFlags(Intent.FLAG_ACTIVITY_CLEAR_TOP);
startActivity(homeIntent);
回答2:
You can call System.exit(); to get out of all the acivities.
submit=(Button)findViewById(R.id.submit);
submit.setOnClickListener(new OnClickListener() {
@Override
public void onClick(View arg0) {
android.os.Process.killProcess(android.os.Process.myPid());
System.exit(1);
}
});
回答3:
If you want to exit from your application, use this code inside your button pressed event:
public void onBackPressed() {
moveTaskToBack(true);
android.os.Process.killProcess(android.os.Process.myPid());
System.exit(1);
}
回答4:
@Override
public void onBackPressed() {
AlertDialog.Builder alertDialogBuilder = new AlertDialog.Builder(this);
alertDialogBuilder.setTitle("Exit Application?");
alertDialogBuilder
.setMessage("Click yes to exit!")
.setCancelable(false)
.setPositiveButton("Yes",
new DialogInterface.OnClickListener() {
public void onClick(DialogInterface dialog, int id) {
moveTaskToBack(true);
android.os.Process.killProcess(android.os.Process.myPid());
System.exit(1);
}
})
.setNegativeButton("No", new DialogInterface.OnClickListener() {
public void onClick(DialogInterface dialog, int id) {
dialog.cancel();
}
});
AlertDialog alertDialog = alertDialogBuilder.create();
alertDialog.show();
}
回答5:
It's way too easy. Use System.exit(0);
回答6:
Accually there are two possible situations:
- You may want to exit from the activity
- Or you want to exit from the application
You can exit from the activity using following code:
var intent = new Intent(Intent.ActionMain);
intent.AddCategory(Intent.CategoryHome);
intent.SetFlags(ActivityFlags.NewTask);
startActivity(intent);
finish();
But this will not kill the underlying activities in the same application.
This will just minimize the application.
If you want to exit from application use the following code to end its process:
android.os.Process.killProcess(android.os.Process.myPid());
for mono development just use
process.KillProcess(Process.MyPid());
回答7:
android.os.Process.killProcess(android.os.Process.myPid());
回答8:
Since api 16 you can use the finishAffinity method, which seems to be pretty close to closing all related activities by its name and javadoc description:
this.finishAffinity();
Finish this activity as well as all activities immediately below it in the current task that have the same affinity. This is typically used when an application can be launched on to another task (such as from an ACTION_VIEW of a content type it understands) and the user has used the up navigation to switch out of the current task and in to its own task. In this case, if the user has navigated down into any other activities of the second application, all of those should be removed from the original task as part of the task switch.
Note that this finish does not allow you to deliver results to the previous activity, and an exception will be thrown if you are trying to do so.
Since api 21 you can use a very similar command
finishAndRemoveTask();
Finishes all activities in this task and removes it from the recent tasks list.
Alternatives:
getActivity().finish();
System.exit(0);
int pid = android.os.Process.myPid();
android.os.Process.killProcess(pid);
Intent i = new Intent(context, LoginActivity.class);
i.putExtra(EXTRA_EXIT, true);
i.addFlags(Intent.FLAG_ACTIVITY_CLEAR_TOP);
i.addFlags(Intent.FLAG_ACTIVITY_NEW_TASK);
i.addFlags(Intent.FLAG_ACTIVITY_CLEAR_TASK);
context.startActivity(i);
Source: How to quit android application programmatically
Hope it helps! Good Luck!
回答9:
How about this.finishAffinity()
From the docs,
Finish this activity as well as all activities immediately below it in the current task that have the same affinity. This is typically used when an application can be launched on to another task (such as from an ACTION_VIEW of a content type it understands) and the user has used the up navigation to switch out of the current task and in to its own task. In this case, if the user has navigated down into any other activities of the second application, all of those should be removed from the original task as part of the task switch.
Note that this finish does not allow you to deliver results to the previous activity, and an exception will be thrown if you are trying to do so.
回答10:
@Override
public void onBackPressed() {
Intent homeIntent = new Intent(Intent.ACTION_MAIN);
homeIntent.addCategory( Intent.CATEGORY_HOME );
homeIntent.setFlags(Intent.FLAG_ACTIVITY_CLEAR_TOP);
startActivity(homeIntent);
}
回答11:
Use this.finishAffinity(); on that button instead of finish();
If it does not work then you can also try by adding android:noHistory="true" in your manifest and then finish your activity by uisng finish(); or finishAffinity();
Hope it helps....:)
回答12:
Try this on a call. I sometimes use it in onClick of a button.
Intent intent = new Intent(Intent.ACTION_MAIN);
intent.addCategory(Intent.CATEGORY_HOME);
intent.setFlags(Intent.FLAG_ACTIVITY_NEW_TASK);
startActivity(intent);
It instead of closing your app , opens the dashboard so kind of looks like your app is closed.
read this question for more clearity
android - exit application code
回答13:
this will clear Task(stack of activities) and begin new Task
Intent intent = new Intent(Intent.ACTION_MAIN);
intent.addCategory(Intent.CATEGORY_HOME);
intent.addFlags(Intent.FLAG_ACTIVITY_CLEAR_TASK);
intent.addFlags(Intent.FLAG_ACTIVITY_NEW_TASK);
startActivity(intent);
System.exit(1);
回答14:
ghost activity called with singletop and finish() on onCreate should do the trick
回答15:
put this one into your onClic:
moveTaskToBack(true);
finish()
回答16:
It works using only moveTaskToBack(true);
回答17:
Achieving in Xamarin.Android:
public override void OnBackPressed()
{
MoveTaskToBack(true);
Process.KillProcess(Process.MyPid());
Environment.Exit(1);
}
回答18:
just use the code in your backpress
Intent startMain = new Intent(Intent.ACTION_MAIN);
startMain.addCategory(Intent.CATEGORY_HOME);
startMain.setFlags(Intent.FLAG_ACTIVITY_NEW_TASK);
startActivity(startMain);
回答19:
If you are using EventBus (or really any other pub/sub library) in your application to communicate between activities you can send them an explicit event:
final public class KillItWithFireEvent
{
public KillItWithFireEvent() {}
public static void send()
{
EventBus.getDefault().post(new KillItWithFireEvent());
}
}
The only downside of this is you need all activities to listen to this event to call their own finish()
. For this you can easily create shim activity classes through inheritance which just listen to this event and let subclasses implement everything else, then make sure all your activities inherit from this extra layer. The kill listeners could even add some extra functionality through overrides, like avoiding death on certain particular situations.
回答20:
If you use both finish and exit your app will close complitely
finish();
System.exit(0);
回答21:
Instead of System.exit(1) Just use System.exit(0)
回答22:
Just run the below two lines when you want to exit from the application
android.os.Process.killProcess(android.os.Process.myPid());
System.exit(1);