Android的Java绑定失败的BINDER TRANSACTION?

我试图从服务中下载一个图像,并在活动中显示它,但我不断收到

java binder FAILED BINDER TRANSACTION 

这是我的服务代码

 public class DownloadImageService extends Service { @Override public int onStartCommand(Intent intent, int flags, int startId) { new LoadImageAsync().execute(intent.getStringExtra("type")); return Service.START_NOT_STICKY; } @Override public IBinder onBind(Intent intent) { return null; } private class LoadImageAsync extends AsyncTask<String, Void, String> { byte[] compressedImage; Bitmap bmp; String img; @Override protected void onPreExecute() { super.onPreExecute(); } @Override protected String doInBackground(String... params) { try { URL url = new URL(imgUrl); bmp = BitmapFactory.decodeStream(url.openConnection().getInputStream()); compressedImage = CompressBitmap.compresssImage(bmp); img = Base64.encodeToString(compressedImage, Base64.DEFAULT); } catch (IOException e) { compressedImage = null; bmp = null; e.printStackTrace(); } return null; } @Override protected void onPostExecute(String s) { super.onPostExecute(s); if (compressedImage != null) { Intent i = new Intent(getApplicationContext(), OtherCampaignActivity.class); i.setFlags(Intent.FLAG_ACTIVITY_NEW_TASK); i.putExtra("image_byte", img); startActivity(i); } stopService(new Intent(getApplicationContext(), DownloadImageService.class)); } } 

}

压缩function

 public static byte[] compresssImage(Bitmap b) { ByteArrayOutputStream stream = new ByteArrayOutputStream(); b.compress(Bitmap.CompressFormat.PNG, 100, stream); byte[] compressedByteArray = stream.toByteArray(); return compressedByteArray; } 

我的活动

 public class OtherActivity extends AppCompatActivity { private ImageView iv; @Override protected void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState); setContentView(R.layout.activity_other); iv = (ImageView) findViewById(R.id.imageViewCam); byte[] byteArray = Base64.decode(getIntent().getStringExtra("image_byte"), Base64.DEFAULT); // byte[] byteArray = getIntent().getExtras().getByteArray("image_byte"); Bitmap bitmap = BitmapFactory.decodeByteArray(byteArray, 0, byteArray.length); iv.setImageBitmap(bitmap); } @Override public void onBackPressed() { super.onBackPressed(); finish(); } } 

代码中有什么问题。 活动没有开始。

该应用程序不会崩溃。 我只在logcat中得到这个:

 06-30 12:38:36.800 29992-29992/com.vt.enit E/JavaBinder﹕ !!! FAILED BINDER TRANSACTION !!! 

这可能是由于我猜大位图。

Solutions Collecting From Web of "Android的Java绑定失败的BINDER TRANSACTION?"

创build图像的caching解决了我的问题

 private LruCache<String, Bitmap> mMemoryCache; @Override protected void onCreate(Bundle savedInstanceState) { ... // Get max available VM memory, exceeding this amount will throw an // OutOfMemory exception. Stored in kilobytes as LruCache takes an // int in its constructor. final int maxMemory = (int) (Runtime.getRuntime().maxMemory() / 1024); // Use 1/8th of the available memory for this memory cache. final int cacheSize = maxMemory / 8; mMemoryCache = new LruCache<String, Bitmap>(cacheSize) { @Override protected int sizeOf(String key, Bitmap bitmap) { // The cache size will be measured in kilobytes rather than // number of items. return bitmap.getByteCount() / 1024; } }; ... } public void addBitmapToMemoryCache(String key, Bitmap bitmap) { if (getBitmapFromMemCache(key) == null) { mMemoryCache.put(key, bitmap); } } public Bitmap getBitmapFromMemCache(String key) { return mMemoryCache.get(key); } 

参考: caching位图

它失败了,因为你试图发送一个图像作为一个意图额外的,它是太大了。 您不能使用IPC通信技术像意图或服务/活页夹发送图像,根据Android的版本,有1mb / 10mb的限制。