IllegalThreadStateException:线程已在新线程上启动

时间:2015-10-09 14:18:51

标签: android java-threads

我正在使用HockeyApp来捕获内部测试人员的崩溃问题,并发现了一条崩溃报告:

java.lang.IllegalThreadStateException: Thread already started
at java.lang.Thread.checkNotStarted(Thread.java:849)
at java.lang.Thread.start(Thread.java:1059)
at com.myapp.service.ApiService.connect(ApiService.java:258)
at com.myapp.service.ApiService.connect(ApiService.java:250)
at com.myapp.service.ApiService.connectForRecord(ApiService.java:748)
at com.fmyapp.service.ApiService.connectForRecord(ApiService.java:733)
at com.myapp.service.ApiService.getOxiChekList(ApiService.java:703)
at com.myapp.service.ApiService.access$1200(ApiService.java:35)
at com.myapp.service.ApiService$1.run(ApiService.java:420)
at java.lang.Thread.run(Thread.java:818)

在查看过后,看起来问题是代码在线程完成后调用onStart()。但是我的服务中唯一调用onStart()的代码如下。请注意,它是在创建新线程后启动的。这只发生过一次所以我不确定任何重复步骤,但我很好奇是否有其他人知道是什么原因造成的。

第256-260行(第258行崩溃)

private void connect(ApiMethod apiMethod, Token authToken, long apiRefKey, String[] urlParams, Object... params) {
    mConnectThread = new ConnectThread(apiMethod, authToken, apiRefKey, urlParams, params);
    mConnectThread.start();
    mIsRunning = true;
}

1 个答案:

答案 0 :(得分:0)

我最近遇到过这个问题, 我检查线程状态是否为terminated并重新启动线程,我的问题解决了,希望这会对你有所帮助

例如:

if(mythread.getState().equals(Thread.State.TERMINATED)) {
    mythread = new Thread(new Runnable() {
            @Override
            public void run() {
                while(status == GameStatus.Running) {
                    try {
                        Thread.sleep(1000);
                        timelapsed += 1;
                    } catch (InterruptedException e) {
                        e.printStackTrace();
                    }
                }
            }
        });
}