在java和android中,如何将位图从服务发送到主机?

在java和android中,如何将位图从服务发送到主机?,java,android,service,bitmap,send,Java,Android,Service,Bitmap,Send,我正在我的应用程序中创建一个下载图像的服务,我不清楚如何将结果(位图)从服务发送到主要活动。我可以这样做吗?或者在服务中,只可能将下载的图像保存在某个位置,只发送无用的消息?尝试从活动绑定到服务,然后将活动实例传递到服务。在这种情况下,您可以将位图从服务传递到活动。但是,您需要非常小心,不要引入内存泄漏 大概是这样的: class TestActivity extends Activity { private BitmapService mBitmapService; priva

我正在我的应用程序中创建一个下载图像的服务,我不清楚如何将结果(位图)从服务发送到主要活动。我可以这样做吗?或者在服务中,只可能将下载的图像保存在某个位置,只发送无用的消息?

尝试从活动绑定到服务,然后将活动实例传递到服务。在这种情况下,您可以将位图从服务传递到活动。但是,您需要非常小心,不要引入内存泄漏

大概是这样的:

class TestActivity extends Activity {
    private BitmapService mBitmapService;
    private final ServiceConnection mServiceConnection = new ServiceConnection() {
        @Override
        public void onServiceConnected(ComponentName componentName,
                                       IBinder iBinder) {
            BitmapService.BitmapServiceBinder mBinder = (BitmapService.BitmapServiceBinder) iBinder;
            mBitmapService = mBinder.getBitmapService();
        }

        @Override
        public void onServiceDisconnected(ComponentName componentName) {
        }
    };

    public void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.main);
        bindService(new Intent(this, XMLDownloaderService.class), mServiceConnection, BIND_AUTO_CREATE);

    }

    @Override
    protected void onDestroy() {
        super.onDestroy();
        unbindService(this.mServiceConnection);
    }
}
你的服务方:

public class BitmapService extends BitmapService {

    public class BitmapServiceBinder extends Binder {
        public BitmapService getBitmapService() {
             return BitmapService.this;
        }
    }

     public BitmapService() {
        super("BitmapService");
     }

     @Override
     public IBinder onBind(Intent intent) {
         return mBinder;
     }

     @Override
     public void onCreate() {
          super.onCreate();
           if (mBinder == null) {
               mBinder = new BitmapServiceBinder();
           }
     }
}

Bitmap
实现了
Parcelable
,因此您可以始终按照以下意图传递它:

Intent intent = new Intent(this, NewActivity.class);
intent.putExtra("BitmapImage", bitmap);
并在另一端检索它:

Intent intent = getIntent();
Bitmap bitmap = (Bitmap) intent.getParcelableExtra("BitmapImage");
如果位图作为文件或资源存在,则最好传递位图的URI或ResourceID,而不是位图本身。传递整个位图需要大量内存。传递URL只需要很少的内存,并允许每个活动根据需要加载和缩放位图

回答从以下位置退出: