相关疑难解决方法(0)

我们如何在Android中使用runOnUiThread?

我是Android新手,我正在尝试使用UI-Thread,所以我写了一个简单的测试活动.但我认为我误解了一些东西,因为点击按钮 - 应用程序不再响应

public class TestActivity extends Activity {

    Button btn;
    int i = 0;

    @Override
    public void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.main);
        btn = (Button)findViewById(R.id.btn);
        btn.setOnClickListener(new View.OnClickListener() {
            @Override
            public void onClick(View v) {
                runThread();
            }
        });
    }

    private void runThread(){
        runOnUiThread (new Thread(new Runnable() {  
            public void run() {
                while(i++ < 1000){
                    btn.setText("#"+i);
                    try {
                        Thread.sleep(300);
                    } 
                    catch (InterruptedException e) {
                        e.printStackTrace();
                    }
                }
             }
        }));
    }
}
Run Code Online (Sandbox Code Playgroud)

android ui-thread

149
推荐指数
6
解决办法
31万
查看次数

Android runOnUiThread说明

我试图在我的一个活动的onCreate()方法期间显示进度对话框,完成工作以填充线程中完成的屏幕,然后关闭进度对话框.

这是我的onCreateMethod()

dialog = new ProgressDialog(HeadlineBoard.this);
        dialog.setMessage("Populating Headlines.....");
        dialog.show();
        populateTable();
Run Code Online (Sandbox Code Playgroud)

populateTable方法包含我的线程和解除对话框的代码,但由于某种原因.活动空白大约10秒(执行populateTable()工作),然后我看到屏幕.我从来没有看到对话框显示,任何想法?

这是populateTable()代码:

//Adds a row to the table for each headline passed in
private void populateTable() {
    new Thread() {
        @Override
        public void run() {
            //If there are stories, add them to the table
            for (Parcelable currentHeadline : allHeadlines) {
                addHeadlineToTable(currentHeadline);
            }
               try {
                     // code runs in a thread
                     runOnUiThread(new Runnable() {
                            @Override
                            public void run() {
                                dialog.dismiss();
                            }
                     });
               } catch (final Exception ex) {
                   Log.i("---","Exception in thread"); …
Run Code Online (Sandbox Code Playgroud)

android

24
推荐指数
3
解决办法
9万
查看次数

Android JNI - 来自C++的Android UI线程上的调用函数

我们的游戏引擎Cocos2d-x在其自己的非Java-UI线程上本机运行在android上.我们需要在Android UI线程上通过JNI从C++调用某些Java函数.

为了调用JNI-Functions,我们从这里使用JNIHelper.h/cpp: https://github.com/cocos2d/cocos2d-x/blob/v3/cocos/platform/android/jni/JniHelper.h https: //github.com/cocos2d/cocos2d-x/blob/v3/cocos/platform/android/jni/JniHelper.cpp

例如这个C++代码:

Cocos2d-x

理想情况下,我们希望所有这些调用都发生在Android UI线程上,并将std :: function作为参数传递,一旦函数调用完成,就会再次使用Cocos2d-x-thread上的返回值调用该参数.

调用函数的理想方式:

auto retVal = JniHelper::callStaticStringMethod("org/utils/Facebook",
                         "getFacebookTokenString");
Run Code Online (Sandbox Code Playgroud)

但是也有很多没有任何返回值的调用,所以对于那些在java线程上调用它们应该更容易.

c++ java android android-ndk cocos2d-x

6
推荐指数
1
解决办法
3343
查看次数

标签 统计

android ×3

android-ndk ×1

c++ ×1

cocos2d-x ×1

java ×1

ui-thread ×1