首页 > 解决方案 > 线程在活动生命周期之后运行?

问题描述

我在一个线程中有网络操作,oncreate()基于网络响应我需要处理下一步,但线程在活动生命周期之后运行。

我在活动中的 oncreate() 中调用了 networkRequest()

private void networkRequest() {

 final String[] resp = new String[1];
 Thread thread = new Thread(new Runnable() {
  @Override
  public void run() {
   try {
    resp[0] = AttemptingUploadCheckList.getJsonObj(url);
    JSONObject response = new JSONObject(resp[0]);

    if (response != null) {
     version_code = response.getInt("version_code");
     recommended_update = response.getBoolean("recommended_update");
     forced_update = response.getBoolean("forced_update");
    }
    if (recommended_update) {
     recomendUpadate();
    } else if (forced_update)
     onUpdateNeeded(url);
    else {
     Intent intent = new Intent(SplashActivity.this, LoginActivity.class);
     startActivity(intent);
     finish();
    }

   } catch (Exception e) {
    e.printStackTrace();
   }
  }
 });
 thread.start();
}

标签: androidmultithreadingactivity-lifecycle

解决方案


Thread不受活动约束。它没有与主线程一起运行。

Android说如果你想执行任何长时间运行的任务api calldata from database那么你需要使用AsyncTaskService

在您的情况下,您可以使用AsycnTask获取数据。

class MyAsync extends AsyncTask<Void, Void, Void>{
        final String[] resp = new String[1];
        JSONObject response;
        @Override
        protected void onPreExecute() {
            super.onPreExecute();

            // Show Progress Dialog
        }

        @Override
        protected void onPostExecute(Void aVoid) {
            super.onPostExecute(aVoid);

            // Hide Progress Dialog

            if (response != null) {
                version_code = response.getInt("version_code");
                recommended_update = response.getBoolean("recommended_update");
                forced_update = response.getBoolean("forced_update");
            }
            if (recommended_update) {
                recomendUpadate();
            } else if (forced_update)
                onUpdateNeeded(url);
            else {
                Intent intent = new Intent(SplashActivity.this, LoginActivity.class);
                startActivity(intent);
                finish();
            }
        }

        @Override
        protected Void doInBackground(Void... voids) {

                        try {
                            resp[0] = AttemptingUploadCheckList.getJsonObj(url);
                            response = new JSONObject(resp[0]);

                        } catch (Exception e) {
                            e.printStackTrace();
                        }

            return null;
        }
    }

用于执行上述AsynTask

private void networkRequest() {
       new MyAsync().execute();
}

推荐阅读