android - 线程在活动生命周期之后运行?
问题描述
我在一个线程中有网络操作,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();
}
解决方案
Thread
不受活动约束。它没有与主线程一起运行。
Android
说如果你想执行任何长时间运行的任务api call
,data from database
那么你需要使用AsyncTask或Service。
在您的情况下,您可以使用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();
}
推荐阅读
- python - python将0.00000077转换为科学计数法
- php - Laravel 中的自定义路由
- linux - 无法在本地网络服务器上注册 git runner
- python - 确定哪个点的子集最接近多项式
- php - 如何递归区分两个文件夹,然后复制 PHP 中的差异
- java - 使用 Java 运行时从 mysql 转储 sql 文件中检索表
- scala - 为什么 Action 变成了 Accumulator
- java - 无法运行程序“C:\Program Files\Java\jdk1.8.0_221\jre\bin\java” 目录名无效
- android - 使用 SearchView 过滤 RecyclerView 结果
- ms-access - 使用来自访问函数的值的传递查询更新数据