如何告知前一个活动实例的线程已经完成?

时间:2010-10-31 15:17:17

标签: java android mobile

我正在编写位图编辑器,我正在尝试编写自动保存功能。调用onPause时,我将应用程序状态写入自动保存文件。由于这需要0.1s到1.5s,我被告知这个IO操作是在后台线程中执行的。

在我的活动的onCreate方法中,我检查自动保存文件是否存在,如果存在,我打开它。

是否有任何情况我必须考虑用户可以以某种方式离开活动,自动保存线程启动并且用户可以在线程完成之前返回活动?如果是这样,在检查自动保存文件的状态之前,如何检测并等待线程完成?

我打算这样做,当用户退出我的活动时,会要求他们在保存数据时等待一秒钟。这似乎没问题,但是当我的活动被电话打断时,我无法做到这一点。

另外,我对如何启动相同活动的多个版本感到有点困惑,因为这会使处理自动更新变得更加复杂。有没有办法确保一次只允许一个我的活动实例运行?

2 个答案:

答案 0 :(得分:1)

我建议你使用Service类来处理这些状态的保存和加载。应确保服务在应用程序生命周期内单独使用。

答案 1 :(得分:0)

我正在努力解决类似问题,但在我的情况下,有一个线程可以控制应用程序的空闲时间,并且如果空闲时间到期,则自动关闭。我发现了 1)可以有多个活动实例(包括主要实例) 2)线程必须是单例或在应用程序的子代中实例化(从Activity.getApplication()开始) 3)为了保留多个活动实例,我的线程保留在运行活动的memoty列表中,只是在onCreate()期间添加到列表并在onDestroy()期间删除,如:

@Override
public void onCreate(Bundle savedInstanceState)
{
    super.onCreate(savedInstanceState);
    getApp().addActivity(this); //add to thread controlled by Application
}

@Override
public void onDestroy()
{
    super.onDestroy();
    getApp().removeActivity(this); //remove from thread controlled by Application
}

希望这会有所帮助......