我正在移植我的一个应用程序,因此大部分工作都在应用程序的本地部分完成,Java端只是用于我的UI。
目前我想要实现一个ProgressBar,它将显示本地线程操作的状态。UI由不同的Activity组成,我打算从这些Activity中显示ProgressBar。
问题是:我该怎么做?我有以下一些本地代码:
目前我想要实现一个ProgressBar,它将显示本地线程操作的状态。UI由不同的Activity组成,我打算从这些Activity中显示ProgressBar。
问题是:我该怎么做?我有以下一些本地代码:
jclass clazz = emv->FindClass( "com/example/myapp/MainActivity" );
该代码返回clazz为空值。我意识到此时未显示MainActivity活动,而是我的SettingsActivity的一个实例,因此我试图相应更改上述代码行,但仍返回null。
无法从本地代码中调用FindClass()以检索Activity类吗?
最终我认为我需要做的是调用以下方法:
public void ProgressUpdateFromNative( int i )
{
runOnUiThread( new Runnable()
{
@Override
public void run()
{
DisplayProgressUpdate();
}
} );
}
这是我的一个Activity中的方法。
jmethodID ProgressUpdateFromNative = env->GetMethodID( clazz, "ProgressUpdateFromNative", "(I)V");
env->CallObjectMethod( g_pObj, ProgressUpdateFromNative, 1 ) ;
我从onLoad() JNI调用中检索了JavaVM指针,并调用了JavaVM->AttachCurrentThread()以检索上述使用的env指针。
请问有人可以告诉我缺少什么 - 也就是为什么我从FindClass返回null类,或者如果我做错了,请给我提供不同的方向。我打算再研究一下Handler,但我认为我对它的理解还不够深入。
注意:我确实可以从Java UI轮询一些本地变量,但我更喜欢回调/事件处理的实现,而不是轮询。
FindClass()
方法? - HHK