我有一些本机代码,想要从本机代码更新进度条。没有返回值,因为它是一个持续时间很长的任务
我找到了一个小例子http://developer.android.com/reference/android/widget/ProgressBar.html但是当我在一个额外的方法中移动更新部分时,我得到一个NullPointerException。
似乎这部分必须在进度条的线程中。
我尝试使用AsyncTask
作为嵌套类的另一种方法,但我无法从类本身以外的任何地方访问方法publishProgress
。
是否有可能让它发挥作用?
答案 0 :(得分:1)
如果可以将您的长任务分成多个增量调用,那么我建议您这样做。然后你可以在AsyncTask.doInBackground()中的循环中进行这些调用,就像在SDK示例中一样。
如果那是不可能的,那么你的本机代码中需要一个可以安全地从多个线程访问的进度变量:从你的工作代码写入它并从一个新的“getProgress()”JNI函数读取它,在本机代码中完成的appropriate synchronisation。然后,您就可以从AsyncTask.doInBackground()调用getProgress()函数,或者您选择使用的任何UI方案。