4. 因为提及延时这个词,所以第一时间想到线程;
new Thread(new Runnable() { @Override public void run() { Picasso.with(GuideActivity.this).load(imageUrl).into(guideIv); } }).start();
Activity.runOnUiThread(Runnable)View.post(Runnable)View.PostDelayed(Runnable)Handler
public class MainActivity extends AppCompatActivity { private ImageView mImageView; @Override protected void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState); setContentView(R.layout.activity_main); mImageView = (ImageView) findViewById(R.id.main_Iv); mImageView.setScaleType(ImageView.ScaleType.CENTER); // 当点击默认图片时,进行图片的切换 mImageView.setOnClickListener(new View.OnClickListener() { @Override public void onClick(View v) { // 声明一个异步类对象 DownloadTask downloadTask = new DownloadTask(); // 将ImageView空间传递到异步类中 downloadTask.setImageView(mImageView); // 执行异步操作(网址传递) downloadTask.execute("http://sjbz.fd.zol-img.com.cn/t_s320x510c/g5/M00/0F/0E/ChMkJ1fJSDKIFwPTAAvIx93CjoYAAU8twM39KkAC8jf384.png"); } }); } }
public class DownloadTask extends AsyncTask{ private ImageView mImageView; public void setImageView(ImageView imageView) { mImageView = imageView; } @Override protected Bitmap doInBackground(String... params) { try { // 进行网络请求(此处也可使用OkHttp进行网络请求) // 但是要注意的是发起请求的方法应该是 client.newCall(request).execute(); // 而不是: // client.newCall(request).enqueue(new Callback() { // @Override // public void onFailure(Call call, IOException e) { // // } // } // 正如你所看到的,该方法会再开一个线程,导致创建Bitmap的时候出现报空行为 URL url = new URL(params[0]); HttpURLConnection conn = (HttpURLConnection) url.openConnection(); InputStream is = conn.getInputStream(); return BitmapFactory.decodeStream(is); } catch (MalformedURLException e) { e.printStackTrace(); } catch (IOException e) { e.printStackTrace(); } return null; } @Override protected void onPostExecute(Bitmap bitmap) { super.onPostExecute(bitmap); // 将网络解析下来的数据设置到控件上 mImageView.setImageBitmap(bitmap); } }