所以我有一个问题,我想知道如果可以解决它怎么解决它。
我有一个名为Messenger的外部库类,它定义了sendMessage(String msg)方法。我还有以下MessengerManager类
public class MessengerManager{
private Messenger messenger;
public MessengerManager(Context context){
messenger = new Messenger(context);
}
public void message(){
String msg = "12435";
messenger.sendMessage(msg);
// Do more stuff
.....
.....
.....
}
}
所以问题是sendMessage以异步方式运行并启动一个新活动。可能使用startActivity()(让我们调用这个Activity A)。因此,sendMessage(“Do more stuff”)之后的代码立即运行。但是,我需要等待新创建的活动(活动A)返回以继续“执行更多内容”。
由于sendMessage是在外部库中定义的方法,因此我无法以任何方式更改它,也无法访问其源代码。
所以,简而言之,我的问题是sendMessage创建了一个新线程(可能使用startActivity()),我需要知道这个新创建的活动何时结束。但是,我无法监视它,因为它是在外部库中定义的。有谁知道如何解决这个问题?
答案 0 :(得分:4)
AsyncTask应该是你想要的。 让你的 message()启动一个AsyncTask,它在 doInBackground()中调用 messenger.sendMessage(msg)。如果您关心AsyncTask的结果,请在 onPostExecute()中获取它。
http://developer.android.com/reference/android/os/AsyncTask.html
答案 1 :(得分:2)
一个公认的丑陋方式是打电话 Thread.sleep(int毫秒) 在sendMessage()之后,在继续使用其余代码之前。当然,只有你能够相当准确地估计获得回调需要多长时间,这才会有所帮助。
更好的选择是凯菲说的。但你不会想要做更多的东西"它现在在哪里。相反,将它放在一个新方法中,并在onPostExecute()中调用该方法。这样,代码将不会继续,直到AsyncTask返回。
编辑:看到您需要创建的活动完成的补充。如果是这种情况,那么您将以某种方式需要与该活动进行通信(我无法在不查看所有代码的情况下与之交谈)。但如果你有这个,那么在"做更多的东西"之前,插入
while(!activity.isFinished()) {}
并且在该活动中,让它在完成后将完成变量设置为true(但是您定义完成)。所以主线程将运行此循环,直到第二个线程上的活动完成,然后第一个线程将继续。
Double Edit:另一个想法。让我们说用户必须完成的其他活动是某种形式。在你的主要活动中,在你调用sendMessage()之后,有一些弹出窗口,用户选择"完成"当他们完成新活动时。只有完成后才能继续执行该程序"已被选中。对用户来说有点烦人,但如果它只有一个额外的点击,那应该有效。
答案 2 :(得分:0)
正如您所提到的,sendMessage()
以异步方式运行。如果写得正确,它还必须提供一个回调接口,当消息传递完成时,将调用其方法。移动该回调方法中的代码。