多次启动/调用同一线程Java Android

卡斯拉

我需要在我的应用中多次调用同一线程。使用我的原始代码,第一次执行就可以了。但是第二次崩溃-然后我知道每个线程最多只能执行一次。

我的原始代码:

View.OnClickListener myClickListener = new View.OnClickListener() {

    @Override
    public void onClick(View v) {
        mythread.start();
    }
};


Thread mythread = new Thread(){

    @Override
    public void run() {

        runOnUiThread(new Runnable() {
            public void run() {
                demoBt.setText("Running...");
            }
        });

     try {
        sleep(1000);
    } catch (InterruptedException e) {
        e.printStackTrace();
    }       

        runOnUiThread(new Runnable() {
            public void run() {
                demoBt.setText("Finished...");
            }
        });
    }
};

因此,正如我所说,如果我尝试第二次运行它,它将崩溃。所以我试图像这样修改它:

View.OnClickListener myClickListener = new View.OnClickListener() {

    @Override
    public void onClick(View v) {
        test();
    }
};

private void test(){

    Thread mythread = new Thread(){

        @Override
        public void run() {

            runOnUiThread(new Runnable() {
                public void run() {
                    demoBt.setText("Running...");
                }
            });

         try {
            sleep(1000);
        } catch (InterruptedException e) {
            e.printStackTrace();
        }       

            runOnUiThread(new Runnable() {
                public void run() {
                    demoBt.setText("Finished...");
                }
            });
        }
    };

    mythread.start();
}

效果很好;但我的问题是,这是执行此操作的正确方法,还是有更优化的方法?

另外,从另一个线程的内部人员调用线程是否可以接受?(就像我在我的新线程中将内容放到UI线程上的方式一样)

编辑:这只是一个例子。对于我的实际代码,我需要完成大量基于数学的模拟,这需要10秒的时间。根据将显示给用户的结果,他们可能希望更改其输入参数,然后再次运行模拟。这将发生几次。

安德烈斯

这样做没有什么不好,但是我认为更好的方法是使用AsyncTask正是针对这种情况而设计的。

您可以使用AsyncTask多次来创建一个这样的新文件new MyAsyncTask().execute("");(来自此处

本文收集自互联网,转载请注明来源。

如有侵权,请联系[email protected] 删除。

编辑于
0

我来说两句

0条评论
登录后参与评论

相关文章

来自分类Dev

多次启动/调用同一线程Java Android

来自分类Dev

Android返回方法必须在同一线程错误上调用

来自分类Dev

如果它在android的同一线程中运行,为什么要使用Service

来自分类Dev

在同一线程内的线程中调用实例

来自分类Dev

为什么这些任务在同一线程中启动?

来自分类Dev

为什么这些任务在同一线程中启动?

来自分类Dev

是否从同一线程调用cURL CURLOPT_WRITEFUNCTION?

来自分类Dev

enumerateKeysAndObjectsUsingBlock:是否可以在同一线程上调用它?

来自分类Dev

从同一线程内部中止线程

来自分类Dev

是否可以在Java RMI的同一线程中运行对两个不同方法的远程调用?

来自分类Dev

在已经运行的 android 线程上调用函数?在监听蓝牙的同一个线程上写?

来自分类Dev

是否可以确保channelActive和channelRead由特定线程的同一线程调用?

来自分类Dev

调用线程无法访问从同一线程创建的对象

来自分类Dev

如果从同一线程调用了Dispatcher.BeginInvoke,则该调用是否排队?

来自分类Dev

在同一线程上运行块

来自分类Dev

WebBrowser在同一线程上运行

来自分类Dev

P / Invoke调用的方法是否在同一线程中运行?

来自分类Dev

如何在同一线程上调用system.threading.timer?

来自分类Dev

ViewPager多次调用-Android

来自分类Dev

ViewPager多次调用-Android

来自分类Dev

是否可以确保为同一通道的同一线程调用channelActive和channelRead?

来自分类Dev

如何在需要时暂停正在运行的线程并重新启动同一线程?

来自分类Dev

从同一帐户多次订购 Android 应用程序的订阅

来自分类Dev

防止从 Start() 多次调用 Android Service OnStart() - 再次调用相同的线程 (Xamarin)

来自分类Dev

Google Guava Cache是否在同一线程上加载?

来自分类Dev

如何分批使用同一线程池

来自分类Dev

同一线程上的代码以异常顺序执行

来自分类Dev

为什么必须使用同一线程?

来自分类Dev

在同一线程NUnit中运行所有测试

Related 相关文章

  1. 1

    多次启动/调用同一线程Java Android

  2. 2

    Android返回方法必须在同一线程错误上调用

  3. 3

    如果它在android的同一线程中运行,为什么要使用Service

  4. 4

    在同一线程内的线程中调用实例

  5. 5

    为什么这些任务在同一线程中启动?

  6. 6

    为什么这些任务在同一线程中启动?

  7. 7

    是否从同一线程调用cURL CURLOPT_WRITEFUNCTION?

  8. 8

    enumerateKeysAndObjectsUsingBlock:是否可以在同一线程上调用它?

  9. 9

    从同一线程内部中止线程

  10. 10

    是否可以在Java RMI的同一线程中运行对两个不同方法的远程调用?

  11. 11

    在已经运行的 android 线程上调用函数?在监听蓝牙的同一个线程上写?

  12. 12

    是否可以确保channelActive和channelRead由特定线程的同一线程调用?

  13. 13

    调用线程无法访问从同一线程创建的对象

  14. 14

    如果从同一线程调用了Dispatcher.BeginInvoke,则该调用是否排队?

  15. 15

    在同一线程上运行块

  16. 16

    WebBrowser在同一线程上运行

  17. 17

    P / Invoke调用的方法是否在同一线程中运行?

  18. 18

    如何在同一线程上调用system.threading.timer?

  19. 19

    ViewPager多次调用-Android

  20. 20

    ViewPager多次调用-Android

  21. 21

    是否可以确保为同一通道的同一线程调用channelActive和channelRead?

  22. 22

    如何在需要时暂停正在运行的线程并重新启动同一线程?

  23. 23

    从同一帐户多次订购 Android 应用程序的订阅

  24. 24

    防止从 Start() 多次调用 Android Service OnStart() - 再次调用相同的线程 (Xamarin)

  25. 25

    Google Guava Cache是否在同一线程上加载?

  26. 26

    如何分批使用同一线程池

  27. 27

    同一线程上的代码以异常顺序执行

  28. 28

    为什么必须使用同一线程?

  29. 29

    在同一线程NUnit中运行所有测试

热门标签

归档