如果 activity 已结束 [​​=10=] Studio,我该如何跟踪

How do I track if activity has ended Android Studio

我有一个 activity 用于将对象添加到我的应用程序中的数据库,数据库显示在 activity 中,它调用了一个 AddActivity。我的问题是我需要在更新数据库后刷新 ArrayList,但我无法在我的 AddActivity 中访问它。所以我想在 AddActivity 结束时在 MainActivity 中进行跟踪,然后调用刷新 function。现在我尝试使用下面的代码,这是有效的,但我不认为这是我应该做的方式,我觉得有更好的功能,但我找不到它。

MainActivity里面的代码onClickListener:

Intent intent = new Intent(mContext, ExerciseAdd.class);
startActivityForResult(intent, 1);

AddActivity 中的代码也在onClickListener:

dataBaseAccess = ExercisesDataBaseAccess.getInstance(getApplicationContext());
                dataBaseAccess.open();
                dataBaseAccess.addExercise(nameString, typeString, "NULL");
                dataBaseAccess.close();

                Intent intent = new Intent();
                intent.putExtra("result", 1);
                setResult(1, intent);
                finish();

以及 MainActivity 中的刷新函数:

 @Override
    public void onActivityResult(int requestCode, int resultCode, @Nullable Intent data)
    {
        super.onActivityResult(requestCode, resultCode, data);
        dataBaseAccess.open();
        exercises = dataBaseAccess.getAllExercises();
        dataBaseAccess.close();
        adapter.setExercises(exercises);
        adapter.notifyDataSetChanged();
    }

或者有没有办法将对 ArrayList 的引用传递给 AddActivity?我很难找到关于这个的任何信息

您这样做的方式是最稳健和干净的方式。您将数据存储在数据库中,并且有一个 Activity 用于向数据库添加项目,另一个 Activity 从数据库读取数据并显示它。这看起来有点矫枉过正,但这种架构比在活动之间共享内存中的数据更健壮。

当然可以在activity之间共享内存中的数据。您可以将对 ArrayList<Exercise> 的引用存储在 public static 变量中,并且两个活动都可以访问它。这是一种共享数据的简单方法,但如果您的应用程序进入后台并且 Andriod 终止了托管该应用程序的 OS 进程,然后用户 returns 访问该应用程序,则可能会很棘手。如果他上次使用 AddActivity,当他 returns 到应用程序时,Android 将创建一个新的 OS 进程来托管应用程序并实例化 AddActivity ,但 MainActivity 尚未实例化,您共享的 public static 数据将会消失。所以这种做法容易出错。

另一种方法是使用实​​时数据。这是一种在活动之间共享内存中数据的更复杂的方法。您可以在此处阅读有关实时数据的更多信息:https://developer.android.com/topic/libraries/architecture/livedata