Как убить все действия в приложении Android?
Я хочу закрыть общее приложение в android, когда я нажимаю кнопку "НЕТ" в диалоговом окне. Я использовал следующий код.
protected Dialog onCreateDialog(int id) {
switch (id) {
case 0:
AlertDialog.Builder builder1 = new AlertDialog.Builder(this);
builder1.setTitle("GASIMIZER");
builder1.setCancelable(false)
.setPositiveButton("YES",
new DialogInterface.OnClickListener() {
public void onClick(DialogInterface dialog,int which) {
Intent i = new Intent(Finalpage.this,NewproActivity.class);
startActivity(i);
}
})
.setNegativeButton("NO",new DialogInterface.OnClickListener() {
public void onClick(DialogInterface dialog,int which)
{
quit();
}
});
AlertDialog alert1 = builder1.create();
alert1.show();
break;
}
return null;
}
public void quit() {
onDestroy();
}
Пожалуйста, скажите мне, как я могу решить эту проблему.
Ответы
Ответ 1
вы можете вызвать метод finish()
в своей деятельности и программно вызвать домашний экран (имитировать домашнюю кнопку) следующим образом:
private void endApplication() {
Intent intent = new Intent(Intent.ACTION_MAIN);
intent.addFlags(Intent.FLAG_ACTIVITY_CLEAR_TOP);
intent.addCategory(Intent.CATEGORY_HOME);
startActivity(intent);
}
Ответ 2
Сделайте это немного просто. Предположим, у вас есть класс Constants.java
, в который вы помещаете все свои повторно используемые константы приложения. В этом объявлении стека действий следующим образом:
public static ArrayList<WeakReference<Activity>> activity_stack=new ArrayList<WeakReference<Activity>>();
/**
* Add the activity as weak reference to activity stack.
* @param act
*/
public static void addToActivityStack(Activity act)
{
WeakReference<Activity> ref = new WeakReference<Activity>(act);
activity_stack.add(ref);
}
И всякий раз, когда вы создаете какую-то активность, в ней onCreate на последней строке вы помещаете что-то вроде этого:
Constants.addToActivityStack(this);
Теперь определите метод, подобный следующему в Constants.java
/**
* Kill all the activities on activity stack except act.
* To kill all the passed parameter should be null.
*/
public static void killAllExcept(Activity act)
{
for(WeakReference<Activity> ref:Global.activity_stack)
{
if(ref != null && ref.get() != null)
{
if(act != null && ref.get().equals(act))
{
continue;//dont finish this up.
}
ref.get().finish();
}
}
activity_stack.clear();//but clear all the activity references
}
Теперь, когда вам нужно закончить все ваши действия, просто позвоните Constants.killAllExcept(null)
или Constants.killAllExcept(this)
, если вы хотите сохранить эту активность.
Этот метод удобен, если вы хотите сохранить одно действие, но другие/если хотите, вы можете закончить их.
Ответ 3
Вы должны НЕ убить свои приложения. Вы должны позволить обработчику ActivityManager.
В частности, если вы хотите, чтобы пользователь оставил ваше приложение, отправьте их домой с помощью намерения на рабочий стол.
Ответ 4
Вы не должны называть onDestroy()
самостоятельно.. вместо этого звоните finish()
, чтобы закрыть Activity.
Метод жизненного цикла вызывающей активности сам по себе является плохой практикой (не знаю, возможно ли это). Они обрабатываются самой ОС Android.
Ответ 5
Следует подчеркнуть, что предложенный подход Constants.killAll() является плохим дизайном и будет использоваться при неправильном использовании утечек памяти. Сохранение статической ссылки на активность является наиболее распространенной причиной утечек памяти в Android.
Надеюсь, что это поможет.