退出Android应用程序返回按钮

时间:2012-06-18 04:45:26

标签: android android-activity

我有一个应用程序,我有不同的活动。在1个活动中,我希望当用户按下后退按钮时,我希望关闭应用程序并显示主屏幕

代码

public boolean onKeyDown(int keyCode, KeyEvent event) 
        {
            //Handle the back button
            if(keyCode == KeyEvent.KEYCODE_BACK) 
                {
                    //Ask the user if they want to quit
                    new AlertDialog.Builder(this)
                    .setIcon(android.R.drawable.ic_dialog_alert)
                    .setTitle("Exit")
                    .setMessage("Really Exit ?")
                    .setPositiveButton("Yes", new DialogInterface.OnClickListener() 
                        {
                            public void onClick(DialogInterface dialog, int which) 
                                {
                                 Intent intent = new Intent(Intent.ACTION_MAIN);
                                intent.addCategory(Intent.CATEGORY_HOME);
                                intent.setFlags(Intent.FLAG_ACTIVITY_NEW_TASK);
                                startActivity(intent);
                                }
                        })
                    .setNegativeButton("No", null)
                    .show();
                    return true;
                }
            else 
                {
                return super.onKeyDown(keyCode, event);
                }
        }

当我运行此按钮并按后退按钮时,会显示主屏幕,但是当我第二次运行它时,我得到一个控制台输出

  

ActivityManager:警告:活动未启动,其当前任务已被置于最前面。

显示按下后退按钮的活动。 我认为该应用程序不会被杀死并在后台运行。简而言之,这不是我的应用程序的开始活动。

有人可以帮助我,我是初学者。

7 个答案:

答案 0 :(得分:4)

试试这段代码:

@Override
public void onBackPressed()
{
      moveTaskToBack(true);
}

同时检查此Link

答案 1 :(得分:3)

对于您用于进入其他活动的每个意图,您必须按照这种方式传递意图,只需将标记传递给下面及之后给出的每个意图使用 startActivity()开始活动你必须在下面给出的演示代码后添加完成()

Intent i=new Intent(firstActivity.this,secondActivity.class);
i.addFlags(Intent.FLAG_ACTIVITY_CLEAR_TOP);
startActivity(i);
finish();

答案 2 :(得分:2)

您不能随意终止您的申请。当Android操作系统希望释放分配给它的资源时,它将执行此操作。您无法在android中实际实现退出应用程序概念。用户可以简单地离开您的Activity并返回它。如果它必须从第一个Activity重新启动或者从它离开的地方重新开始,那么它取决于Android操作系统,而不是你。

阅读这篇文章,了解如何设计Android应用程序的理念以及为什么您不想按照自己的意愿退出: Is quitting an application frowned upon?

答案 3 :(得分:1)

在该行finish();之后添加startActivity(intent),完成您的活动。

由于

答案 4 :(得分:1)

您需要在代码中包含此类.........

  public abstract class AppBaseActivity extends Activity {
public static final String FINISH_ALL_ACTIVITIES_ACTIVITY_ACTION =    "com.hrupin.FINISH_ALL_ACTIVITIES_ACTIVITY_ACTION";
private BaseActivityReceiver baseActivityReceiver = new BaseActivityReceiver();
public static final IntentFilter INTENT_FILTER = createIntentFilter();

private static IntentFilter createIntentFilter(){
    IntentFilter filter = new IntentFilter();
    filter.addAction(FINISH_ALL_ACTIVITIES_ACTIVITY_ACTION);
    return filter;
}

protected void registerBaseActivityReceiver() {
    registerReceiver(baseActivityReceiver, INTENT_FILTER);
}

protected void unRegisterBaseActivityReceiver() {
    unregisterReceiver(baseActivityReceiver);
}

public class BaseActivityReceiver extends BroadcastReceiver{
    @Override
    public void onReceive(Context context, Intent intent) {
        if(intent.getAction().equals(FINISH_ALL_ACTIVITIES_ACTIVITY_ACTION)){
            finish();
        }
    }
} 

protected void closeAllActivities(){
    sendBroadcast(new Intent(FINISH_ALL_ACTIVITIES_ACTIVITY_ACTION));
}
  }

然后你需要扩展此类中的所有其他类,如下例所示:

    public class FirstActivity extends AppBaseActivity implements OnClickListener {
/** Called when the activity is first created. */

private Button buttonOpenNextActivity;

@Override
public void onCreate(Bundle savedInstanceState) {
    super.onCreate(savedInstanceState);
    setContentView(R.layout.first);
    registerBaseActivityReceiver();
    buttonOpenNextActivity = (Button)findViewById(R.id.buttonOpenNextActivity);
    buttonOpenNextActivity.setOnClickListener(this);
}

@Override
protected void onDestroy() {
    super.onDestroy();
    unRegisterBaseActivityReceiver();
}

@Override
public void onClick(View v) {
    /* OPEN SECOND ACTIVITY.*/
    startActivity(new Intent(this, SecondActivity.class));
}
  }

另一堂课:

       public class SecondActivity extends AppBaseActivity implements OnClickListener {
private Button buttonOpenNextActivity;

/** Called when the activity is first created. */
@Override
public void onCreate(Bundle savedInstanceState) {
    super.onCreate(savedInstanceState);
    setContentView(R.layout.second);
    registerBaseActivityReceiver();
    buttonOpenNextActivity = (Button)findViewById(R.id.buttonOpenNextActivity);
    buttonOpenNextActivity.setOnClickListener(this);
}

@Override
protected void onDestroy() {
    super.onDestroy();
    unRegisterBaseActivityReceiver();
}

@Override
public void onClick(View v) {
    /* OPEN THIRD ACTIVITY.*/
    startActivity(new Intent(this, ThirdActivity.class));
}
            }

最后一堂课:

      public class ThirdActivity extends AppBaseActivity  implements OnClickListener  {
private Button buttonCloseAllActivities;

/** Called when the activity is first created. */
@Override
public void onCreate(Bundle savedInstanceState) {
    super.onCreate(savedInstanceState);
    setContentView(R.layout.third);
    registerBaseActivityReceiver();
    buttonCloseAllActivities = (Button)findViewById(R.id.buttonCloseAllActivities);
    buttonCloseAllActivities.setOnClickListener(this);
}

@Override
protected void onDestroy() {
    super.onDestroy();
    unRegisterBaseActivityReceiver();
}

 @Override
protected void onBackPressed() {
    closeAllActivities();
    super.onBackPressed();
}
}

现在,当您在第三个活动中按下后退按钮时,所有其他活动也将完全完成。

1 /别忘了在onCreate中注册接收器,并在ondestroy()中取消注册()。

答案 5 :(得分:0)

亲爱的,你的问题不明确。

据我所知,你应该使用broadCast Reciever完成应用程序并将意图传递给主屏幕。

MoreOver警告什么都没有,在运行你的应用程序之前只需在你的代码中输入Enter或者给出空格并保存它并重新运行你的应用程序。它会正常工作....

答案 6 :(得分:0)

如果你想在退回时退出你的应用程序,那么当你按下该屏幕上的后退按钮时你必须完成所有以前的活动,你应该使用 BROADCAST RECIEVER 的概念。 ....意味着你已经在该背面播放了一个意图,它将完成之前的所有活动。