use*_*895 5 android dropbox-api google-drive-api
我面临以下问题:我需要从服务开始一项活动。服务在继续下一个方法之前等待活动的结果非常重要。
目前我有这样的事情:
startActivity(new Intent(this, GoogleAuthHelperActivity.class), FLAG_ACTIVITY_NEW_TASK);
//code should wait for the result of the GoogleAuthHelperActivity before continuing
GoogleAuthHelperActivity.apiClient.isConnected();//gives nullpointer
Run Code Online (Sandbox Code Playgroud)
我在对 Dropbox API 进行身份验证时遇到了同样的问题,所以我需要一个通用的解决方案。
任何想法如何解决这个问题?
服务中没有等同的东西startActivityForResult,所以你必须自己推出。
第一个选项:
为此,您可以使用多个标准 Java 工具,例如Object.wait / Object.notify,它们需要共享对象引用。
例如,在某处声明:
public static final Object sharedLock = new Object();
Run Code Online (Sandbox Code Playgroud)
并为您服务:
startActivity(new Intent(this, GoogleAuthHelperActivity.class), FLAG_ACTIVITY_NEW_TASK);
synchronized (sharedLock) {
sharedLock.wait();
}
Run Code Online (Sandbox Code Playgroud)
并在活动中:
// do something upon request and when finished:
synchronized (sharedLock) {
sharedLock.notify();
}
Run Code Online (Sandbox Code Playgroud)
java.util.concurrent包中还有其他更复杂的类可以用于此目的。但请注意,服务与活动在同一线程上运行,因此如果您不从服务启动新线程,那么这将不起作用。
另一个可能的问题是,如果您无法在两者之间共享对象引用(因为它们在不同的进程中运行)。然后你必须以其他方式发出结束信号。
第二个选项:
您可以将服务代码分为两部分(活动之前和之后)。运行活动并在完成后向服务发送新意图。收到第二项服务后,您可以继续第二部分。
| 归档时间: |
|
| 查看次数: |
3466 次 |
| 最近记录: |