1

我有一个应用程序,其中我有不同的活动。在 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:警告:Activity 没有启动,它的当前任务已经被带到了前面。

并显示按下后退按钮的活动。我认为应用程序不会被杀死并在后台运行。顺便提一下,这不是我的应用程序的启动活动。

谁能帮帮我,我是初学者。

4

7 回答 7

4

试试这个代码:

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

还要检查这个链接

于 2012-06-18T04:54:17.677 回答
3

对于您用于进入其他活动的每个Intent,您必须按照这种方式传递 Intent,只需将标志传递 给每个 Intent,如下所示,在使用startActivity()启动Activity后,您必须在该演示代码之后添加finish()如下所示

Intent i=new Intent(firstActivity.this,secondActivity.class);
i.addFlags(Intent.FLAG_ACTIVITY_CLEAR_TOP);
startActivity(i);
finish();
于 2012-06-18T05:11:18.003 回答
2

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

阅读这篇文章以了解应如何设计 android 应用程序的理念以及为什么您不想随意退出: 退出应用程序是否令人不悦?

于 2012-06-18T04:48:24.017 回答
1

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

谢谢

于 2012-06-18T04:50:04.480 回答
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() 中取消注册()。

于 2012-06-18T05:08:47.440 回答
0

亲爱的,你的问题不清楚。

据我所知,您应该使用广播接收器来完成应用程序并将意图传递到主屏幕。

MoreOver 警告没什么,在运行您的应用程序之前,只需在您的代码中按 Enter 或给 sm 空间并保存它并重新运行您的应用程序。它会正常工作....

于 2012-06-18T04:51:26.167 回答
0

如果您想在后按时退出您的应用程序,那么您必须在按该屏幕上的后退按钮时完成所有先前的活动,为此您应该使用BROADCAST RECIEVER的概念......意味着您已经广播了一个意图在将完成所有先前活动的背压上。

于 2012-06-18T04:52:18.210 回答