如果 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
我有一个 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