【问题标题】:Android endless activity loopAndroid 无限活动循环
【发布时间】:2016-04-26 10:13:53
【问题描述】:

您好,我有一个小问题,在我的应用程序中有点像循环My image

在我提供的图片中,您可以看到两个活动,每个活动都有一个按钮。当按下按钮 1 时,它会将您带到第二个活动,当按下按钮 2 时,它会将您带到完美的活动一。问题是,如果我要连续按下这些按钮在两者之间导航,那么大量的活动会像一条线一样堆积起来,当按下后退按钮时,你会自动浏览所有打开的活动。

  1. 我的问题是我是否实现了 onDestroy 方法,如果是,该怎么做?

  2. 我可以覆盖后退按钮,直接返回活动一且不再继续吗?

【问题讨论】:

  • android:noHistory="true" --- 在清单中。不过要注意影响,请阅读文档。
  • 在你的第二个活动中不要使用 Intent just finish();您的活动,它将关闭您的第二个活动并恢复第一个活动
  • Rakshit 你能举个例子吗?这是我目前正在使用的。 startActivity(new Intent(getApplicationContext(), ContactUsMainActivity.class));
  • @james :当您单击第一个按钮时,您正在使用意图转到第二个活动,因此当您单击第二个活动中的第二个按钮时,只需使用 finish(); .它将关闭您的第二个活动并恢复您的第一个活动
  • 在传递下一个活动的意图后,您可以简单地调用finish()

标签: android performance android-activity overriding ondestroy


【解决方案1】:

实现如下所示的意图:

Intent intent = new Intent(getApplicationContext(), Home.class);
intent.addFlags(Intent.FLAG_ACTIVITY_CLEAR_TASK | Intent.FLAG_ACTIVITY_CLEAR_TOP);
startActivity(intent);

当新活动打开时,之前的活动将被关闭。

【讨论】:

    【解决方案2】:

    我的问题是我是否实现了一个 onDestroy 方法,如果是,我该怎么做?

    你可以在传递到下一个活动时调用finish()

    Intent intent = new Intent(Activity1.this, Activity2.class);
    startActivity(intent);
    finish();
    
    Intent intent = new Intent(Activity2.this, Activity1.class);
    startActivity(intent);
    finish();
    

    我可以覆盖后退按钮以直接返回活动吗 一个,没有更进一步?

    Activity2中,你可以在onClick中调用onBackPressed喜欢

        button2.setOnClickListener(new View.OnClickListener() {
                @Override
                public void onClick(View v) {
                   onBackPressed();
                }
            });
    }
    @Override
    public void onBackPressed(){
         // do what ever you want before you back to previous activity
         super.onBackPressed();
         // call super.onBackPressed(); or finish();
    }
    

    【讨论】:

      【解决方案3】:

      假设您将使用以下方法进行第二个活动

       button1.setOnClickListener(new View.OnClickListener() {
              @Override
              public void onClick(View v) {
                   Intent to_second=new Intent(FirstActivity.this,SecondActivity.class);
                   startActivity(to_second);
              }
          });
      

      现在在您的第二个活动中执行以下操作

      button2.setOnClickListener(new View.OnClickListener() {
                  @Override
                  public void onClick(View v) {
                   finish();
                  }
              });
      

      button2 将完成您的第二个活动并再次恢复您的第一个活动,您可以再次单击 button1 以打开第二个活动并继续循环。

      【讨论】:

        【解决方案4】:

        好吧,你可以在你的AndroidManifest 中创建launchMode="singleInstance" 这两个活动。您可以通过onNewIntent() 呼叫发送一些东西。

        不要调用super.onBackPressed(),因为它会导致finish()被调用,只需启动另一个活动。

        如果您不需要重新创建活动,您可以使用此解决方案,否则使用 CLEAR_TOP 等

        【讨论】:

          猜你喜欢
          • 1970-01-01
          • 1970-01-01
          • 1970-01-01
          • 1970-01-01
          • 2011-05-11
          • 1970-01-01
          • 2014-07-08
          • 1970-01-01
          相关资源
          最近更新 更多