Android- Thread.join()导致Application挂起

Android- Thread.join()导致Application挂起,第1张

概述我有一个处理我的游戏循环的线程,当我在这个线程上调用.join()时应用程序停止响应. 我一直在努力解决程序永远无法访问代码的问题,因为线程永远不会结束. System.out.println("YAY"); 我的游戏循环线程: 这个帖子成功打印出“Game Ended”但似乎永远不会完成. Runnable startGameLoop = new Runnable() {//game loop 我有一个处理我的游戏循环的线程,当我在这个线程上调用.join()时应用程序停止响应.
我一直在努力解决程序永远无法访问代码的问题,因为线程永远不会结束.
System.out.println("YAY");

我的游戏循环线程:

这个帖子成功打印出“Game Ended”但似乎永远不会完成.

Runnable startGameLoop = new Runnable() {//game loop          @OverrIDe          public voID run() {              aifactory ai = new aifactory();              final button play = (button) findVIEwByID(R.ID.Play);              final button pass = (button) findVIEwByID(R.ID.Pass);              while(finish==false){                  try {                        Thread.sleep(500);                  } catch (InterruptedException e) {                        e.printstacktrace();                  }                  currentPlayer = game.getPlayer();                  if(currentPlayer.isPlayer()==false){                      //System.out.println("passCount:" +game.getpasscount());                      ai.decIDe(nextPlay,game.getPrevIoUsPlayed(),currentPlayer,game.getpasscount() );                      if(nextPlay.size()!=0){                          runOnUiThread(new Runnable(){                            public voID run(){                                changeArrow();                                if(nextPlay.size() ==1){                                    play1Card();                                }                                else if(nextPlay.size()==2){                                    play2Card();                                }                                else if(nextPlay.size()==3){                                    play3Card();                                }                                else if(nextPlay.size()==5){                                    play5Card();                                }                            }                      }                      else{                          game.addPassCount();                          game.nextTurn();                          runOnUiThread(new Runnable(){                                public voID run(){                                    changeArrow();                                }                            });                      }                        }                   else if (currentPlayer.isPlayer()==true){                      runOnUiThread(new Runnable(){                            public voID run(){                                changeArrow();                                play.setClickable(true);                                 if(game.getpasscount()==3){                                     pass.setClickable(false);                                 }                                 else{                                     pass.setClickable(true);                                 }                            }                        });                  }             }             System.out.println("Game Ended");          }     };

启动并将线程加入主线程:

Thread myThread = new Thread(startGameLoop);     myThread.start();     try {        myThread.join();    } catch (InterruptedException e) {            // Todo auto-generated catch block        e.printstacktrace();    }     System.out.println("YAY");}

据我所知.join()使当前线程等到新线程完成后再继续.

对不起,如果这是一个愚蠢的问题,我对线程很新.

解决方法 当您在Activity.onCreate中调用myThread.join()时,您将阻止主UI线程.当然,看起来你的应用程序已停止响应,因为UI线程是负责重绘UI的人.你的所有调用runOnUiThread永远不会发生,因为你的UI线程忙于等待你的游戏循环. 总结

以上是内存溢出为你收集整理的Android- Thread.join()导致Application挂起全部内容,希望文章能够帮你解决Android- Thread.join()导致Application挂起所遇到的程序开发问题。

如果觉得内存溢出网站内容还不错,欢迎将内存溢出网站推荐给程序员好友。

欢迎分享,转载请注明来源:内存溢出

原文地址: http://outofmemory.cn/web/1136540.html

(0)
打赏 微信扫一扫 微信扫一扫 支付宝扫一扫 支付宝扫一扫
上一篇 2022-05-30
下一篇 2022-05-30

发表评论

登录后才能评论

评论列表(0条)

保存