以下是问题 - 我想从web加载图像并在向用户显示启动活动时在后台解码它们。大约有100多张图片需要下载和解码,然后设置为recyclerview我尝试使用意向服务,但这似乎不起作用。另外,我想同时这样做,所以我正在尝试多线程。意图服务多线程也是?如果是这样,它应该工作,对吗?为了清楚我知道我可以使用Picasso,但我想学习多线程,这对我开始的其他项目很有用。
public class BackgroundClass implements Runnable {
@Override
public void run() {
Process.setThreadPriority(Process.THREAD_PRIORITY_BACKGROUND);
String image = RequestBody formBody = new FormBody.Builder()
.add("request",image)
.build();
Request request = new Request.Builder()
.url(link)
.post(formBody)
.build();
try {
Response response = client.newCall(request).execute();
response1 = response.body().string();
} catch (IOException e) {
e.printStackTrace();
Log.i(TAG, "onHandleIntent: error: "+e.getMessage());
}JSONArray webServiceResponse = null;
try {
webServiceResponse = new JSONArray(response1);
for (int i = 0; i<webServiceResponse.length(); i++) {
JSONObject row = webServiceResponse.getJSONObject(i);
image = (row.getString("image"));
imageArray.add(image);
}
} catch (JSONException e) {
e.printStackTrace();
Log.i(TAG, "onReceive: "+e.getMessage());
}//code for recycler after this
//Once recycler code is done following line of code should execute alongwith recyclerview adpter
setContentView(R.layout.activity_main);
}
}
MainActivity如下 -
public class MainActivity extends AppCompatActivity {
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.splash_activity);
BackgroundClass backgroundClass = new BackgroundClass();
backgroundClass.run();
}
}
然而,setContentView(R.layout.activity_main);没有被执行。现在我在android文档网站上看到,我无法从后台线程设置视图对象属性。如何将其恢复为MainActivity()?这一切都需要同时发生。即,在显示启动活动时,所有其他代码应该在后台发生。我已将意图服务用于其他目的。但它似乎在这里没有用。或者我无法让它发挥作用。 如果还有其他多线程技术,我也会对此持开放态度。我对多线程不是很有经验,所以任何帮助都会受到赞赏。
谢谢, hyperCoder