Android Java活页夹失败的活页夹交易? [英] Android java binder FAILED BINDER TRANSACTION?
本文介绍了Android Java活页夹失败的活页夹交易?的处理方法,对大家解决问题具有一定的参考价值,需要的朋友们下面随着小编来一起学习吧!
问题描述
我正在尝试从服务下载图像并将其显示在活动中,但是我一直在获取
I am trying to download an image from service and display it in activity but I keep getting
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));
}
}
}
压缩功能
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();
}
}
代码中的问题是什么。活动尚未开始。
What is the issue in the code. The activity is not starting.
应用程序没有崩溃。我只能在logcat中得到它:
the app is not crashing. I only get this in logcat:
06-30 12:38:36.800 29992-29992/com.vt.enit E/JavaBinder﹕ !!! FAILED BINDER TRANSACTION !!!
我想这可能是由于位图很大。
It is probably due to large bitmap I guess.
推荐答案
创建图像缓存可以解决我的问题
Creating the cache of the image solves my problem
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);
}
参考:缓存位图
这篇关于Android Java活页夹失败的活页夹交易?的文章就介绍到这了,希望我们推荐的答案对大家有所帮助,也希望大家多多支持IT屋!
查看全文