0

我正在使用 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)

在查看 SO 之后,问题似乎是线程完成后代码正在调用 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;
}
4

1 回答 1

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();
                    }
                }
            }
        });
}
于 2017-10-31T02:40:26.983 回答