android 传递图片

当我在activity之间传递图片时,原本使用


Bitmap bitmap = img.getDrawingCache();  
intent.putExtra("bitmap", bitmap);  
  
bitmap = intent.getParcelableExtra("bitmap");


是可以传递的,但是获取的图片首先清晰度不行,而且时常会报一些乱七八糟的bug,但基本用起来没问题,所以也没在意。

这段时间突然发现img.getDrawingCache();获取的值为空,但是不知道为啥。

之后想建一个全局变量,来存储这个bitmap,但是Davlik虚拟机的垃圾回收器会帮助我们回收不需要的内存垃圾。事实上,回收器并不可靠,尤其是手机上,是更加的不可靠。 因此,除非我们要使自己的程序变得越来越糟糕,否则尽量远离static。 
注:如果经常使用static的Bitmap、Drawable等变量。可能就会抛出一个在Android系统中非常著名的异常
ERROR/AndroidRuntime(4958): Caused by: java.lang.OutOfMemoryError: bitmap size exceeds VM budget 

之后就使用在Application中存一个BitMap,因为Application的生命周期就是应用程序的生命周期。然后在Application中get and set 这个BitMap,在其他的页面上调用。


  private Bitmap bitmap;

    public Bitmap getBitmap() {
        return bitmap;
    }

    public void setBitmap(Bitmap bitmap) {
        this.bitmap = bitmap;
    }


MyApplication application = (MyApplication) getApplication();
Bitmap bitmap = application.getBitmap();




  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
要在 Android 中使用 AIDL 传递图片,可以通过以下步骤实现: 1. 在 AIDL 文件中定义一个接口方法,该方法可以接受一个 Bitmap 对象作为参数。 2. 在服务端实现该接口方法,并将传递过来的 Bitmap 对象保存到本地。 3. 在客户端调用该接口方法时,将要传递的 Bitmap 对象转换成 Parcelable 对象,并将其作为参数传递给服务端。 4. 在服务端接收到客户端传递的参数后,将 Parcelable 对象转换回 Bitmap 对象,并进行相应的处理。 以下是一个简单的示例代码: AIDL 文件中定义接口方法: ``` interface IImageService { void uploadImage(in Bitmap image); } ``` 服务端实现接口方法: ``` public class ImageService extends Service { private static final String TAG = "ImageService"; @Override public IBinder onBind(Intent intent) { return mBinder; } private final IImageService.Stub mBinder = new IImageService.Stub() { @Override public void uploadImage(Bitmap image) throws RemoteException { Log.d(TAG, "uploadImage: " + image); // 将传递过来的 Bitmap 对象保存到本地 // TODO: 进行相应的处理 } }; } ``` 客户端调用接口方法: ``` public class MainActivity extends AppCompatActivity { private IImageService mImageService; @Override protected void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState); setContentView(R.layout.activity_main); // 获取 ImageService 的 Binder 对象 Intent intent = new Intent(this, ImageService.class); bindService(intent, mConnection, BIND_AUTO_CREATE); // 要传递的 Bitmap 对象 Bitmap bitmap = BitmapFactory.decodeResource(getResources(), R.drawable.image); // 将 Bitmap 对象转换成 Parcelable 对象,并调用接口方法传递参数 try { Parcel parcel = Parcel.obtain(); bitmap.writeToParcel(parcel, 0); parcel.setDataPosition(0); mImageService.uploadImage(Bitmap.CREATOR.createFromParcel(parcel)); } catch (RemoteException e) { e.printStackTrace(); } } private final ServiceConnection mConnection = new ServiceConnection() { @Override public void onServiceConnected(ComponentName name, IBinder service) { mImageService = IImageService.Stub.asInterface(service); } @Override public void onServiceDisconnected(ComponentName name) { mImageService = null; } }; } ``` 以上代码只是一个简单的示例,实际应用中还需要进行一些错误处理和数据传递的优化。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值