如何在android中有效地使用线程在recyclerview中加载图像

时间:2018-02-13 18:47:15

标签: android

以下是问题 - 我想从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

1 个答案:

答案 0 :(得分:0)

考虑使用PicassoGlide等图片加载库。

图书馆可以为您下载图像并在ImageView中显示。它们还将图像缓存在磁盘和内存中。

使用Picasso从网络加载图像如下:

Picasso.with(context).load("http://i.imgur.com/DvpvklR.png").into(imageView);

您还可以在下载图片时使用占位符图片。