[英]Sending a Byte Array via Intent.putExtra does not work
我正在嘗試通過Intent putExtra方法將捕獲的圖像的字節數組數據發送到另一個視圖,但是它僅適用於前置攝像頭 (因為質量低於后置攝像頭)。 通過后置攝像頭捕獲的照片需要經過一段時間才能顯示,並且大多數時間會使應用崩潰。
我也嘗試壓縮,但這也沒有解決問題。 看一下我的代碼:
captureImage.setOnClickListener(new OnClickListener() {
@Override
public void onClick(View v) {
mCamera.takePicture(null, null, new PictureCallback() {
@Override
public void onPictureTaken(byte[] data, Camera camera) {
Intent i = new Intent(CameraActivity.this, ImageEditor.class);
i.putExtra("image", data);
startActivityForResult(i, 0);
}
});
}
});
捕獲圖像(通過后置攝像頭)后,第二個活動不會打開,應用也不會響應。 但是,這對前置攝像頭有效,因為我猜測字節數組的大小相對較小,並且比后置攝像頭捕獲的圖片需要更少的內存。
如何解決此問題,以便將在活動A中捕獲的圖像發送到活動B?
如何解決此問題,以便將在活動A中捕獲的圖像發送到活動B?
最好的答案是:根本不要這樣做。 如果這些用戶界面緊密相連,那么它們應該是一項活動,可能需要使用多個片段。
下一個最佳答案是: 小心地通過static
數據成員傳遞它(例如,活動A將byte[]
放在static
數據成員中,活動B從那里獲取它)。 您需要通過在活動B引用該數據后立即將數據成員設置為null
來確保不泄漏此byte[]
。
首先嘗試(如果可能,僅用於測試目的):
AndroidManifest.xml中
<manifest xmlns:android="http://schemas.android.com/apk/res/android"
package="package_name"
android:versionCode="1"
android:versionName="1.0" >
<application
android:name="app_name"
android:allowBackup="true"
android:label="@string/app_name"
android:largeHeap="true" <!-- large heap -->
android:theme="@style/AppTheme" >
</manifest>
來自https://developer.android.com/training/articles/memory.html :
檢查應該使用多少內存。但是,請求大堆的功能僅適用於少數可以證明需要消耗更多RAM的應用程序(例如大型照片編輯應用程序)。 切勿僅僅因為內存用完並且需要快速修復而請求大堆-僅在確切知道所有內存的分配位置以及為什么必須保留它時,才應使用它。 但是,即使您確信自己的應用程序可以證明大堆的合理性,也應盡可能避免請求它。 使用額外的內存將越來越不利於整體用戶體驗,因為在任務切換或執行其他常見操作時,垃圾回收將花費更長的時間並且系統性能可能會降低。
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.