我正在我的应用程序中提供下载图像的服务,我不清楚如何将结果(位图)从服务发送到主要活动。我能这样做吗?或者在服务中,只有在某处保存下载的图像并仅发送无用的消息的可能性?
答案 0 :(得分:1)
尝试从活动绑定到服务,然后将活动的实例传递给服务。在这种情况下,您可以将位图从服务传递到活动。但是,您需要非常小心,不要引入内存泄漏
这样的事情:
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();
}
}
}
答案 1 :(得分:0)
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只需要很少的内存,并允许每个活动在需要时加载和缩放位图。
回答来自: How can I pass a Bitmap object from one activity to another