[关闭]
@ZeroGeek 2015-08-28T10:04:38.000000Z 字数 1198 阅读 573

WeakReference在Android中的使用

android


定义

1. 非UI线程处理Bitmap(可以替换为其它对象)

以下摘自官网

  1. class BitmapWorkerTask extends AsyncTask {
  2. private final WeakReference imageViewReference;
  3. private int data = 0;
  4. public BitmapWorkerTask(ImageView imageView) {
  5. // Use a WeakReference to ensure the ImageView can be garbage collected
  6. imageViewReference = new WeakReference(imageView);
  7. }
  8. // Decode image in background.
  9. @Override
  10. protected Bitmap doInBackground(Integer... params) {
  11. data = params[0];
  12. return decodeSampledBitmapFromResource(getResources(), data, 100, 100));
  13. }
  14. // Once complete, see if ImageView is still around and set bitmap.
  15. @Override
  16. protected void onPostExecute(Bitmap bitmap) {
  17. if (imageViewReference != null && bitmap != null) {
  18. final ImageView imageView = imageViewReference.get();
  19. if (imageView != null) {
  20. imageView.setImageBitmap(bitmap);
  21. }
  22. }
  23. }
  24. }

2. 管理Activity与Handler通信

以下为本人项目中的代码片段,完整代码

  1. static class WeakReferenceHander extends Handler {
  2. private final WeakReference<ShareUploadActivity> mActivity;
  3. public WeakReferenceHander(ShareUploadActivity activity) {
  4. mActivity = new WeakReference<ShareUploadActivity>(activity);
  5. }
  6. @Override
  7. public void handleMessage(Message msg) {
  8. if (mActivity.get() != null) {
  9. mActivity.get().handleReceiveMessage(msg);
  10. }
  11. }
  12. }
添加新批注
在作者公开此批注前,只有你和作者可见。
回复批注