1. 程式人生 > >Android相機呼叫後直接閃退的問題

Android相機呼叫後直接閃退的問題

現象:

1、在效能比較好的Android手機,比如nexus 6,小米4等手機上拍完照,並截圖後,均能夠正常更換頭像。

2、在genymotion的模擬器上的sumsung galaxy s3以及nexus 6上拍照截圖均正常。

3、小米2/2s的Android4.4.4上時而正常,時而發生閃退現象。

4、試用過程中有其他同事反映拍照功能異常。

歸類:

歸類為手機相容性問題,要麼是軟體系統相容導致,要麼是硬體配置過低導致。

具體原因分析:

1、圖片太大。手機記憶體不夠。

2、本身引數設定不正確。

3、activity被殺掉。

問題排查:

1、在拍照過程中涉及到檔案儲存,以及Bitmap decode。及時釋放開啟的檔案流和bitmap物件。節省記憶體。

2、圖片crop時,將解析度適當設小,防止圖片過大。另外截圖儲存在uri中。圖片程式碼如下:

/**

* 收縮圖片

*

*@paramuri,資料來源

*/

public voidstartPhotoZoom(Uri uri) {

Intent intent =newIntent("com.android.camera.action.CROP");//呼叫Android系統自帶的一個圖片剪裁頁面,

intent.setDataAndType(uri,IMAGE_UNSPECIFIED);//INTENT需要開啟的檔案uri及檔案型別

intent.putExtra("crop","true");//進行修剪

// aspectX aspectY 是寬高的比例

intent.putExtra("aspectX",1);

intent.putExtra("aspectY",1);

// outputX outputY 是裁剪圖片寬高,設定為200,防止圖片過大intent.putExtra("outputX",200);

intent.putExtra("outputY",200);

//        intent.putExtra("return-data", true);//intent can not pass data over 1Mbintent.putExtra("return-data",false);//intent中不返回具體二進位制,防止記憶體佔用

//將截圖儲存在uri中File tempFile =newFile(Environment

.getExternalStorageDirectory(),"tempCrop.jpg");

intent.putExtra(MediaStore.EXTRA_OUTPUT, Uri.fromFile(tempFile));

intent.putExtra("outputFormat", Bitmap.CompressFormat.JPEG.toString());//設定圖片格式

this.cropTempFile= tempFile.getPath();

Log.d(TAG,"cropTemp file:"+cropTempFile);

this.target.startActivityForResult(intent,PHOTO_RESULT);

}

3、crop返回的資料儲存時,進行壓縮。程式碼如下:

// 處理結果

if(requestCode ==PHOTO_RESULT) {

Bundle extras = data.getExtras();

if(extras !=null) {

//                Bitmap photo = extras.getParcelable("data"); //不在intent中直接傳遞資料頭像

BitmapFactory.Options options =newBitmapFactory.Options();

options.inSampleSize=2;

Bitmap photo = BitmapFactory.decodeFile(this.cropTempFile,options);

File fileDir = Environment.getExternalStorageDirectory();

FileOutputStream out =null;

try{

File storeFile =newFile(fileDir,Constant.HEAD_PIC_NAME);

out =newFileOutputStream(storeFile);

photo.compress(Bitmap.CompressFormat.JPEG,75, out);// (0-100)壓縮檔案

out.flush();

//save portrait

this.localPortraitPath= storeFile.toURI().toString();

savePortrait(ServerEnvs.getAppBaseUrl() +"/gateway/saveStoneIcon", storeFile);

}catch(FileNotFoundException e) {

e.printStackTrace();

}catch(IOException e){

e.printStackTrace();

}finally{

if(out !=null){

try{

out.close();

photo.recycle();//回收頭像

}catch(IOException e) {

e.printStackTrace();

}

}

}

}

}

4、防止Activity在手機全屏,以及旋轉時被回收。

<android:name=".module.myself.activity.HeadChangeActivity"

android:configChanges="orientation|screenSize|keyboardHidden|keyboard"

android:screenOrientation="portrait"

android:theme="@style/translucent"/>

相關推薦

Android相機呼叫直接退的問題

現象: 1、在效能比較好的Android手機,比如nexus 6,小米4等手機上拍完照,並截圖後,均能夠正常更換頭像。 2、在genymotion的模擬器上的sumsung galaxy s3以及nexus 6上拍照截圖均正常。 3、小米2/2s的Android4.

Xcode10退(編譯、執行時輸入資料或沒輸入資料直接退問題)

頻繁的崩潰讓我敲程式碼的心情都受到了影響,然後今天還是10.1更新了,更新完以為會有所好轉,但是頻繁閃退這個問題還是沒有修復,簡直時醉了。 崩潰 向這種頻繁崩潰的情況,直接暴力解決。 首先右鍵主專案檔案即xcodeproj檔案,顯示包內容。找到找到project.xcworks

Android Zxing二維碼掃描圖片拉伸、掃描框過小、掃描框擴大(或不拉伸退問題

(一)Zxing二維碼掃描框大小調整 控制掃描框大小程式碼是在CameraManager類中 google在CameraManager類中設定掃描框大小主要在getFramingRect()中: private static final int MIN_F

【走過巨坑】android studio對於jni呼叫及執行退無法載入庫的問題解決方案

相信很多小夥伴都在android開發中遇到呼叫jni的各種巨坑,因為我們不得不在很多地方用到第三方庫so檔案,然而第三方官方通常都只會給出ADT環境下的整合方式,而谷歌親兒子android studio預設採用的卻是gradle方式,與ADT編輯的方式大不相同,那再andorid studio中如何匯入so

Eclipse開啟退、異常關閉,啟動退的解決辦法

問題描述:         32位Win7系統下 Eclipse開啟便閃退,或者稍微維持十幾分鍾或半小時,還是自動關閉,在虛擬機器桌面內同樣的配置和設定就沒有這個問題,我自己電腦3G記憶體就會出現這樣的閃退或者自動關閉。     &

Qt delete物件程序退,改為deleteLater

今天主要解決了一個bug 程式設計是想要點選一個widget,然後這個widget傳送一個訊息,讓它的父物件進行一些處理操作,然後把它刪掉.但是每次刪除的時候不會出現問題,總是在後面不知道哪裡出問題,程式都會崩潰: 0x00000000646A8ABC (Qt5Widgetsd.dll)

tomcat設定環境變數仍然退問題

解決辦法: 1.在已解壓的tomcat的bin資料夾下找到startup.bat,右擊->編輯。在檔案頭加入下面兩行: SET JAVA_HOME=D:\Java\jdk1.6.0_10 (java jdk目錄) SET TOMCAT_HOME=E:\tomca

git安裝Gitbase退,gui無法使用問題解決

一般是因為null.sys導致,根本原因應該還是你裝的盜版系統有問題,解決辦法如下 cmd 開啟命題提示符後  輸入  sc  start null  看 null.sys是否有問題,如果有問題,重新找一個沒有問題的null.sys替換掉有問題的就可以了,截個圖如下

EXEJ4 生成的java exe檔案更換電腦出現退情況解決辦法

用命令列開啟exe程式後檢查除錯資訊發現如果是The JAVA_HOME environment variable does notpoint to a working 32-bit JDK or JRE.表示本電腦上沒有對應的32位jdk或者jre執行環境,jdk版本不對解

android RecyclerView 頻繁設定資料退問題

最近專案中一個播放的列表,有上下切換功能。測試頻繁切換更換重新整理資料時,報出以下錯誤:java.lang.IllegalArgumentExceptionScrapped or attached views may not be recycled. isScrap:false isAt

關於不同環境android studio 打包替換出現退的問題

以前都是我同事在打包,今天我也來打包,發現打出來的包執行正常,但是如果是覆蓋以前的包會出現閃退,我也是醉了,一直百度不到原因 LOG顯示大概是這樣的 Build fingerprint: 'HUAWEI/TAG-AL00/HWTAG-L6753:5.1/HU

React Native打包執行退

Android原生專案集成了React Native後,打包成release執行起來後會出現閃退情況。 原因:沒有將React Native檔案打包進去。 解決方案:需要新增bundle檔案 在A

ViewController建立釋放退

問題描述 在做專案時遇到一個閃退問題,檢視程式碼邏輯發現以下程式碼會造成crash。 - (IBAction)buttonTouchUpInside:(id)sender { TestTableViewController *vc = [[TestT

解決Eclipse開啟退 Eclipse在異常關閉,啟動退的解決辦法

問題描述:Win7下 Eclipse編譯原本沒問題的工程時,第二天開始編譯總是通不過,後來Debug As - Android Application 除錯時出現卡死現象。工作管理員強制關閉Eclip

android 7.0呼叫相機退問題

解決方案一: 一般歸類為手機相容性問題,要麼是軟體系統相容導致,要麼是硬體配置過低導致。 具體實現的程式碼: String photoNameAll = PhotoUtil.getphotoNam

android studio安裝退

clip eclips and 網上 安裝 工程 jdk版本 ips lips 最近想把以前項目的android代碼工程從Eclipse 轉移到android studio中,下載谷歌最近的android studio安裝包2.3版本安裝後,打開android studio

[轉]關於sdk更新Android SDK Tools 25.3.1版本使用sdk manager退

art 運行 ted studio 令行 最新 pro vdma log 昨天這兩個manager還工作正常,今天更新了一下,發現不可用了,運行avd manager和sdk manager沒反應,搜了好多文章,然後看到了下這篇文章《關於sdk更新Android SDK T

sdk manager退(因為在Android Studio中更新sdk

網上的find_java.bat等懷疑JAVA路徑,測試後發現自己的路徑沒有問題。 原因:AndroidStudio中操作sdk manager,對SDK資料夾中的tools檔案進行了重新的整理分化,導致tools資料夾中的檔案不完整導致。 解決方案: 找到以

Android呼叫相機拍照圖片橫向顯示的問題解決

最近在做一個專案的時候出現需要實時拍照然後作為頭像上傳伺服器的一個操作,按照以前的老專案老是出現拍照後對 圖片處理的問題上圖片橫向顯示,這樣切割出來的圖片也就是橫向了,找了很久才解決出來問題的根源,現在記錄下來, 以後遇到這個問題就不會出錯了。 1:一般相機拍完照後正常顯示在螢幕上如圖,

升級iOS10訪問相機、相簿、麥克風、通訊錄退

升級了iOS10和xcode8,發現訪問相機、相簿、麥克風、藍芽、日曆等時會出現閃退,控制檯給出這樣的資訊: This app has crashed because it attempted t