有更好的方法从另一个活动结束当前活动吗?

5
我有三个活动:FirstActivity、SecondActivity 和 ThirdActivity。FirstActivity 导向 SecondActivity,再导向 ThirdActivity。我希望能在 FirstActivity 和 SecondActivity 之间、FirstActivity 和 ThirdActivity 之间来回移动。
这是我实现的内容:
FirstActivity: 在 FirstActivity 中,我有一个 onClick 方法 "goToSecondActivity",它会启动 SecondActivity。
 public void goToSecondActivity(View view){
        Intent i = new Intent(this, SecondActivity.class);
        final EditText firstText = (EditText) findViewById(R.id.firstText);
        String userMessage = firstText.getText().toString();
        if(!"".equals(userMessage))
        i.putExtra("firstMessage",userMessage);

        startActivity(i);
    }

enter image description here

SecondActivity :

在 SecondActivity 中,我有一个名为 'goToThirdActivity' 的 onClick 方法,用于启动 ThirdActivity。

public void goToThirdActivity(View view){
        Intent i = new Intent(this , ThirdActivity.class);
        startActivity(i);
    }

enter image description here

ThirdActivity:

在ThirdActivity中,我有两个不同按钮上的onClick方法'backToFirstActivity'和'backToPreviousActivity'

enter image description here

当我在ThirdActivity点击“返回到第一个活动”按钮时,我想回到FirstActivity。

我已经做了什么:

SecondActivity:

我声明了静态变量。

static SecondActivity secondActivityMain;

在onCreate方法中分配它:
protected void onCreate(Bundle savedInstanceState) {
       ---
       ---
        secondActivityMain = this;
       ---
       ---

}

ThirdActivity :

使用静态变量结束SecondActivity"SecondActivity.secondActivityMain.finish();"

 public void backToFirstActivity(View view) {
        Toast.makeText(getApplicationContext(), "Third: finished second activity ",
                Toast.LENGTH_SHORT).show();

        new Handler().postDelayed(new Runnable() {
            @Override
            public void run() {
                SecondActivity.secondActivityMain.finish();
                ThirdActivity.this.finish();
            }
        }, 2000);

    }

我的问题是:

1. 有没有更好的方法从另一个活动中结束当前活动?

2. 这种方式正确吗?


请查看FLAG_ACTIVITY_CLEAR_TOP。[https://dev59.com/L2s05IYBdhLWcg3wNPI3] - Prashanth Debbadwar
2个回答

3
如果您想从第三个活动跳转到第一个活动,请使用带有“FLAG_ACTIVITY_CLEAR_TOP”标志的意图,它将清除第三个和第二个活动。
  Intent intent = new Intent(ThirdActivity.this, MainActivity.class);
            intent.addFlags(Intent.FLAG_ACTIVITY_CLEAR_TOP);
            startActivity(intent);

如果在Manifest文件中为FirstActivity指定了android:launchMode =“singleTop”,则当您从ThirdActivity返回到FirstActivity时,OnCreate()方法将不会被调用。 如果在Manifest文件中未指定lanuhMode,则OnCreate将再次被调用。


2
  1. 有没有更好的方法从另一个活动中结束活动?

是的,你所做的是在Activity上使用了static实例,这很容易导致内存泄漏问题。 最好只在必要且非常小心地使用static关键字。

更好的方法是使用BroadCastreceiver

因此,您需要在第一和第二个活动中创建广播接收器,并在想要结束这些活动时使用sendBroadCast(..)方法。

您需要查找在Android中如何使用Broadcastreceiver

  1. 这种方式正确吗?

不是,您所做的方式是不正确的。


感谢您的回答。 - Pallavi
我已经搜索了很多关于如何将我的示例转换为使用广播的内容,但是我不知道如何将我的SecondActivity转换为接收广播。请给予建议。 - Pallavi

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接