【问题标题】:Android thread scheduling / managementAndroid线程调度/管理
【发布时间】:2012-06-18 08:45:38
【问题描述】:

我目前有 2 项不同的活动需要一起完成。

我需要Activity #1先做一些工作,然后调用Activity#2并等到它完成,然后做一些不同的工作,然后暂停并再次调用Activity#2,等等。
编辑:我不知道我在想什么,但我错过了这篇文章: 每当我从 Activity 2 获得一些结果时,我都需要更新 Activity 1 的 UI,因此我决定将大部分代码放在 AsyncTask 中:

//class Activity#1: 
    onCreate(){
     // creates UpdateUITask (the AsyncTask), pass its Context as parameter
    }
    onActivityResult()
    {
     // do something with result
    }

// the AsyncTask
class UpdateUITask implements AsyncTask{
    doInBackground(){
     // uses the passed context to call startActivityForResult(Activity#2)
     // this is done multiple times ***
    }
    publishProgress()
    { 
     // update the UI of Activity #1
    }
}

我的问题是我上面用 * 标记的内容实际上并没有被 startActivityForResult 暂停,而只有 Activity#1 被暂停。因此,AsyncTask 创建了 Activity#2 的多个实例,这在我的情况下是不可取的。有什么办法可以解决这个问题吗?

对之前的不便深表歉意。

【问题讨论】:

  • android中的术语activity代表一个屏幕。不确定您是否使用术语 activity 来表示屏幕或某些胎面活动。请澄清。
  • 它们是常规的屏幕活动,虽然我让它们自动运行,并且它们应该处理我需要的其他活动的一些信息。

标签: android multithreading android-activity


【解决方案1】:

使用startActivityForResult()activity#1 开始activity#2。一旦activity#2 完成操作,您就可以完成该活动。在完成activity#2 onActivityResult() 中描述的activity#1 将被调用,您可以执行剩余的操作。

查看以下链接了解更多信息: http://developer.android.com/reference/android/app/Activity.html#StartingActivities

编辑

doInBackground() 方法在非 UI 线程中运行。从此方法调用startActivityForResult(Activity#2) 会出错。如果您有任何不需要任何用户干预的流程,那么您不需要调用任何活动。只需在doInBackground()publishProgress() 中编写非UI 进程Activity #1

【讨论】:

  • 对不起,直到现在我才意识到我错过了一些重要的事情,我会再次编辑问题。
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 2012-03-31
  • 2010-11-02
  • 2011-02-02
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多