我对此做了很多研究,但仍然不确定是否可以同步连接到 android 服务。startService() 和 bindService() 服务调用本质上是异步的,我想做的是使这种行为同步。
我尝试在从主线程启动的单独线程中编写 startService()、bindService() 和 ServiceConnection 对象初始化(包含 onServiceConnected() 等)。并且主线程等待直到 onServiceConnected() 在另一个线程上被调用并且服务对象被初始化,但由于 onServiceConnected() 仅由主线程调用(http://developer.android.com/reference/android/content/ServiceConnection .html ) 因等待调用而被阻塞,形成死锁。
有谁知道我的上述推理是否正确/不正确?有没有另一种方法来实现同步行为?或者唯一的选择是在 onServiceConnected() 回调发生后调用服务函数?
编辑:(解释它不是其他问题的完全重复)
在另一个问题中,应用程序与服务异步连接并期望它像它提到的那样同步运行“通过添加各种 Log.xx,我发现 if(bindService(...)) 之后的代码实际上在 ServiceConnection 之前运行。正在调用 onServiceConnected”。
但是,我已经意识到这一点,问题是是否有办法与服务同步连接。
我正在尝试传递一个重载的函数指针,如下面的示例代码所示.
class Sample
{
uint32_t method(char* input1, double input2);
uint32_t method(double input1);
}
template<class T, class... Args)
void processInput(T &&t, Args&&... a)
{
std::packaged_task<uint32_t(Args...)> task(std::bind(t, a...));
// other processing
}
// Caller invokes the below API
Sample* obj = new Sample();
processInput(static_cast<uint32_t(*)(double)>(&Sample::method), &*obj, 2.0f);
Run Code Online (Sandbox Code Playgroud)
但是这段代码没有编译.它一直在抱怨它无法确定哪个重载函数实例.我举了几个例子:
http://en.cppreference.com/w/cpp/language/static_cast
有人可以帮忙指出这里出了什么问题吗?
我是协议缓冲区和探索反射方法的新手.我看到一个方法GetReflection()来获取C++中的反射接口,但是,我在Java中找不到类似的方法.有谁知道如何在Java中获得反射界面?
我使用std :: future获得以下源代码.
#include<future>
std::future<int> A;
Run Code Online (Sandbox Code Playgroud)
但是,当我尝试在Application.mk文件中使用NDK_TOOLCHAIN_VERSION:= 4.8进行编译时,它会抛出错误"std :: future A"的类型不完整等."
我试着在android-ndk-r9c文件夹中查找future.h,但是,我找不到它.有谁知道NDK是否支持std :: future?如果是这样,哪个版本有此支持?
在阅读有关ServiceConnection类的文章时,我遇到了这个文档(http://developer.android.com/reference/android/content/ServiceConnection.html),其中写道"与系统中的许多回调一样,此类的方法是从你的过程的主线."
我想知道我是否创建了一个新线程并实现了ServiceConnection方法,系统将永远无法调用onServiceConnected(),因为它不是主线程?