欧美一区二区三区老妇人-欧美做爰猛烈大尺度电-99久久夜色精品国产亚洲a-亚洲福利视频一区二区

android異常,android異常分類有哪四種

Android系統(tǒng)耗電異常怎么解決

若使用的是vivo手機,Android系統(tǒng)是多個功能和服務(wù)的集合體,比如權(quán)限管理、藍牙設(shè)置、電話服務(wù)、指紋與密碼等常用功能有關(guān)的耗電會被計入Android系統(tǒng),如果第三方軟件使用到這些功能,電量也會被計入Android系統(tǒng),所以我們看到Android系統(tǒng)程序耗電較高,實際和第三方軟件的使用情況有關(guān),您可以使用“一鍵加速”清理后臺不必要的程序,適當(dāng)調(diào)低屏幕亮度和音量;另外進入設(shè)置--電池,根據(jù)手機電量情況選擇合適的省電模式,延長手機續(xù)航時間。

在芮城等地區(qū),都構(gòu)建了全面的區(qū)域性戰(zhàn)略布局,加強發(fā)展的系統(tǒng)性、市場前瞻性、產(chǎn)品創(chuàng)新能力,以專注、極致的服務(wù)理念,為客戶提供網(wǎng)站制作、網(wǎng)站建設(shè) 網(wǎng)站設(shè)計制作按需網(wǎng)站設(shè)計,公司網(wǎng)站建設(shè),企業(yè)網(wǎng)站建設(shè),成都品牌網(wǎng)站建設(shè),全網(wǎng)營銷推廣,外貿(mào)網(wǎng)站建設(shè),芮城網(wǎng)站建設(shè)費用合理。

Android開發(fā)常見異常與錯誤系列(一)

一、前言

這系列文章是自己在平時開發(fā)過程中遇到的問題。之前只是記在云筆記上面,現(xiàn)在整理一下,發(fā)出來共享。

ps:像那些什么沒有注冊Activity呀,權(quán)限呀等最基本的就不再贅述。

二、ADB連接異常

有時我們發(fā)現(xiàn),即使自己從任務(wù)管理器里面把adb.exe給干掉了,但還是不行,這時,你就可以嘗試以下操作:

[2014-07-30 17:09:11 - QtActivity] The connection to adb is down, and a severe error has occured.

[2014-07-30 17:09:11 - QtActivity] You must restart adb and Eclipse.

[2014-07-30 17:09:11 - QtActivity] Please ensure that adb is correctly located at ‘D:\InstallFile\AndroidDevelop\ADT\sdk\platform-tools\adb.exe’ and can be executed.

adb起動失敗:

1,殺掉其它的adb.exe看,如果不行,

2,看sdk\tools路徑下面有沒有

hprof-conv.exe

如果有,則把它復(fù)制到sdk\platform_tools下

3,如果沒有,剛看sdk\platform_tools下有沒有

hprof-conv.exe

如果有,剛復(fù)制到tools下。

4,如果兩者都沒有,剛下一個

hprof-conv.exe

三、java.lang.IllegalStateException: Activity has been destroyed

這個異常在切換Fragment中比較容易出現(xiàn),稍不注意就會出現(xiàn)如下異常:

FATAL EXCEPTION: main12-0909:20:14.689: E/AndroidRuntime(31223): java.lang.IllegalStateException: Activity has been destroyed12-0909:20:14.689: E/AndroidRuntime(31223): at android.support.v4.app.FragmentManagerImpl.enqueueAction(FragmentManager.java:1365)12-0909:20:14.689: E/AndroidRuntime(31223): at android.support.v4.app.BackStackRecord.commitInternal(BackStackRecord.java:595)12-0909:20:14.689: E/AndroidRuntime(31223): at android.support.v4.app.BackStackRecord.commit(BackStackRecord.java:574)12-0909:20:14.689: E/AndroidRuntime(31223): at cn.com.topsky.community.tfd.DongTaiFragment.init(DongTaiFragment.java:209)12-0909:20:14.689: E/AndroidRuntime(31223): at cn.com.topsky.community.tfd.DongTaiFragment.onCreateView(DongTaiFragment.java:68)12-0909:20:14.689: E/AndroidRuntime(31223): at android.support.v4.app.Fragment.performCreateView(Fragment.java:1500)12-0909:20:14.689: E/AndroidRuntime(31223): at android.support.v4.app.FragmentManagerImpl.moveToState(FragmentManager.java:927)12-0909:20:14.689: E/AndroidRuntime(31223): at android.support.v4.app.FragmentManagerImpl.moveToState(FragmentManager.java:1104)12-0909:20:14.689: E/AndroidRuntime(31223): at android.support.v4.app.BackStackRecord.run(BackStackRecord.java:682)12-0909:20:14.689: E/AndroidRuntime(31223): at android.support.v4.app.FragmentManagerImpl.execPendingActions(FragmentManager.java:1467)12-0909:20:14.689: E/AndroidRuntime(31223): at android.support.v4.app.FragmentManagerImpl$1.run(FragmentManager.java:440)12-0909:20:14.689: E/AndroidRuntime(31223): at android.os.Handler.handleCallback(Handler.java:605)12-0909:20:14.689: E/AndroidRuntime(31223): at android.os.Handler.dispatchMessage(Handler.java:92)12-0909:20:14.689: E/AndroidRuntime(31223): at android.os.Looper.loop(Looper.java:154)12-0909:20:14.689: E/AndroidRuntime(31223): at android.app.ActivityThread.main(ActivityThread.java:4624)12-0909:20:14.689: E/AndroidRuntime(31223): at java.lang.reflect.Method.invokeNative(Native Method)12-0909:20:14.689: E/AndroidRuntime(31223): at java.lang.reflect.Method.invoke(Method.java:511)12-0909:20:14.689: E/AndroidRuntime(31223): atcom.android.internal.os.ZygoteInit$MethodAndArgsCaller.run(ZygoteInit.java:809)12-0909:20:14.689: E/AndroidRuntime(31223): atcom.android.internal.os.ZygoteInit.main(ZygoteInit.java:576)12-0909:20:14.689: E/AndroidRuntime(31223): at dalvik.system.NativeStart.main(Native Method)

1

2

3

4

5

6

7

8

9

10

11

12

13

14

15

16

17

18

19

20

21

22

經(jīng)查,說這個是當(dāng)前android-support-v4版本的一個bug,因為在當(dāng)fragment進行到detached狀態(tài)時,它會重置它的內(nèi)部狀態(tài)。

然而,它并沒有重置mChildFragmentManager.這導(dǎo)致在Fragment重新attach時,它(fragment)沒有重新attachm childFragmentManager,從而引發(fā)了上面的異常.

解決方案:

在每個調(diào)用getChildFragmentManager()的fragment中復(fù)寫onDetach()方法:

@OverridepublicvoidonDetach() {super.onDetach();try{Field childFragmentManager = Fragment.class.getDeclaredField("mChildFragmentManager");childFragmentManager.setAccessible(true);childFragmentManager.set(this,null);}catch(NoSuchFieldException e) {thrownewRuntimeException(e);}catch(IllegalAccessException e) {thrownewRuntimeException(e);}}

1

2

3

4

5

6

7

8

9

10

11

12

13

14

15

16

17

18

19

20

21

22

23

24

25

四、java.lang.IllegalArgumentException: Illegal character in query at index

這個異常,在我們拼接請求參數(shù)時,可能會碰到,原因是里面的特殊字符轉(zhuǎn)換異常。解決辦法如下:

url轉(zhuǎn)換問題

String url = baseUrl + “?” + “name=” + name + “age=” + age;

url = url.replaceAll(“”, “%26”);

url = url.replaceAll(” “, “%20”);

解釋如下:

特殊符號替換符號

?%3F

%26

|%124

=%3D

#%23

/%2F

+%2B

%%25

空格%20

五、eclipse連接小米2S調(diào)試程序的問題

雖然快2年沒用過eclipse了,但這個問題還是貼出來,也許正好有正在用eclipse的同學(xué)遇到了此問題:

小米Mi2S連接到eclipse上無法識別。即使開啟了調(diào)試模式,也無法識別.終于找到了一個可用的方法。

方法

用數(shù)據(jù)線連接手機和電腦。

打開手機撥號界面。

在撥號界面按 # #717717# # 自動就開啟了。

在通知欄會出現(xiàn)一個 Diag USB port enable。

當(dāng)然,應(yīng)該是需要ROOT權(quán)限的。

這時候你的PC機會彈出安裝設(shè)備驅(qū)動。

如果不成功,多插拔幾次試試。

ok!安裝完就搞定了!這時候打開eclipse就會在Driver里面看到你的手機了。

注意事項

在PC機上安裝新硬件向?qū)r候可能會遭遇到缺少dll文件,比如我就遇到缺少了WinUSBCoInstaller2.dll,這個問題。這時候就要去網(wǎng)上找找嘍。這個東西分x64 和 x86的,注意不要搞錯了!

如果先打開eclipse,再安裝的話,可能導(dǎo)致eclipse掛掉,不明原因,可能是我機器配置不行。兩次均有這種狀況。所以建議先安裝后再開eclipse。

Android BLE藍牙連接異常處理

藍牙通信過程中異常很常見,大致有以下幾種:

1,連接

2,發(fā)現(xiàn)服務(wù)

3,讀寫

4,通知

連接失敗可能是設(shè)備端原因,也可能是手機端原因。不同的手機來自不同的廠家,用的不同的芯片和藍牙協(xié)議棧都會導(dǎo)致藍牙功能的表現(xiàn)不一致,這都會導(dǎo)致各式各樣的兼容性問題,可能有的手機連接成功率高,有的成功率低。設(shè)備端原因可能有些時候出現(xiàn)異常導(dǎo)致死機無響應(yīng),或某些參數(shù)設(shè)置得有問題。但對于Android應(yīng)用層開發(fā)來說,能做的很有限,藍牙通信是在系統(tǒng)服務(wù)進程中處理的,我們無法跨進程改變系統(tǒng)的行為,如果是在一個進程我們還可能通過Hook等手段來調(diào)整其內(nèi)在邏輯。另外應(yīng)用層的接口只是將請求封裝傳遞給系統(tǒng)服務(wù)進程,并未做一些實質(zhì)性的通信,所以應(yīng)用層雖然是同一個進程的,但是Hook意義也不大。所以我們能做的僅僅是看怎樣調(diào)整接口的調(diào)用,使得整體穩(wěn)定性更好一點而已。

連接失敗分兩種,一種是超時,一種是提前返回失敗。

關(guān)于超時,一般是設(shè)備不在周圍,或設(shè)備斷電未發(fā)廣播,或設(shè)備當(dāng)前被其他人連接。系統(tǒng)默認(rèn)超時為30s,通常返回133,我們也可以自己設(shè)置更短的超時時間,超時則closeGatt,然后重新連接。

關(guān)于提前返回失敗,一般是有明確的異常,可能是手機藍牙的異常或者設(shè)備異常。

這兩種情況建議closeGatt,延時500ms,然后重試。如果重試三次仍然失敗,則可以考慮提示用戶重啟手機藍牙,或者檢查設(shè)備是否正常工作。

還有一種情況,連接成功后沒過多久連接又?jǐn)嚅_了,這有可能是設(shè)備主動斷開,連接成功后有的設(shè)備會等待鑒權(quán),如果一定時間內(nèi)手機端還未發(fā)起鑒權(quán)則設(shè)備端主動斷開。也可能連接信道不夠穩(wěn)定導(dǎo)致斷開的,此時closeGatt并重新連接即可。

當(dāng)連接斷開時,會收到onConnectionStateChanged回調(diào),這個回調(diào)可能會有一定延時,甚至有5s以上。解決的辦法是輪詢,如每隔1s發(fā)起一次讀請求,如果連接斷了會立即返回失敗。

如果藍牙連接不穩(wěn)定,可以考慮關(guān)掉WIFI,因為WIFI通常和藍牙共用一個天線。

有的手機上discoverService可能會回調(diào)不止一次onServiceDiscover,這個要注意防御。

當(dāng)連接建立后,可以由設(shè)備端發(fā)起更改連接間隔,這樣能加快后續(xù)發(fā)現(xiàn)服務(wù)以及數(shù)據(jù)讀寫的速度。有的手機discover service很慢,原因是connect interval太大了,有的手機會主動向設(shè)備發(fā)起更改connect interval,而有的手機卻不會。這樣的話connect interval相差就會很大,實踐中發(fā)現(xiàn)有的手機是7ms,有的手機是默認(rèn)的50ms,所以發(fā)現(xiàn)service都要8s,甚至20s的都很尋常,這對用戶來說是無法忍受的。所以比較好的辦法是設(shè)備主動發(fā)起更改connect interval,而Android系統(tǒng)是沒有提供對應(yīng)API的。

如果發(fā)現(xiàn)服務(wù)失敗,通常來說不用closeGatt,重試一下就好了。如果重試三次還失敗,建議清一下緩存,再closeGatt,重新連接。

讀寫失敗要看失敗的原因是什么,如果是權(quán)限問題,則需要和設(shè)備端確認(rèn)是否開放了相應(yīng)的讀寫權(quán)限。也可能是要讀寫的character不存在,可能是設(shè)備端修改了固件,手機端需要刷新一下藍牙緩存,closeGatt再重新連接。如果是其它未知錯誤,則重試三次,仍然失敗則closeGatt。不過通常來說如果是因為連接出了問題導(dǎo)致讀寫失敗的,會收到onConnectionStateChanged回調(diào),此時就不用再無謂的重試了,直接closeGatt,重新連接。

打開/關(guān)閉character的notify,必須等收到onDescriptorWrite回調(diào)之后才算結(jié)束,才能開始下一個任務(wù)。

如果打開notify失敗,則可以改成周期性輪詢的方式去查詢character的值。

可參考該文章

Android-BLE-Issues

Android開發(fā) - 處理 null 和 預(yù)防空指針異常(NullPointerException) 的一些經(jīng)驗

在實際編碼中總是會遇到 空指針異常 ,本文總結(jié)了一些處理空指針的個人經(jīng)驗。

盡早的檢查,盡早的失敗。

比如: 通過intent傳參到新的目標(biāo) activity,而且一定需要這個參數(shù),那么在新的目標(biāo)activity中 onCreate方法中 判斷中這個參數(shù),如果null,直接拋出空指針異常讓程序崩潰。取代在使用該參數(shù)時進行檢查,這樣能更早的發(fā)現(xiàn)問題。或者在 一個普通的方法中,一個 參數(shù)必須不能為null ,那么我們在這個方法的第一行就做出判斷,如果參數(shù)為null,拋出空指針異常。

1.不要在Set中使用null

2.不要把null作為map的鍵值。

3.盡可能的盡早檢查,如果為 null 不執(zhí)行或者 結(jié)束本方法

4.遇到必須的參數(shù),比如通過intent傳參到新的目標(biāo) activity,而且一定需要這個參數(shù),那么在新的目標(biāo)activity中判斷是否有參數(shù)

5.判斷字符串是否空

6.對字符串比較時,如果和常量進行比較,把常量放在前面,比如:

7.將某個對象 toString時,比如:

8.使用注解 @NonNull 和 @Nullable 配合AndroidStudio 幫你檢查你是否沒有檢查可能為null的對象,或者你是否做了多余的檢查。

9.我們引用Guava來幫忙檢查 null 的情況,我們使用 checkNotNull 方法來替代寫 if( obj == null) throw new NullPointExcetion(); ,示例:

Guava是什么:

網(wǎng)站題目:android異常,android異常分類有哪四種
網(wǎng)站地址:http://chinadenli.net/article40/dsidoeo.html

成都網(wǎng)站建設(shè)公司_創(chuàng)新互聯(lián),為您提供搜索引擎優(yōu)化響應(yīng)式網(wǎng)站網(wǎng)站收錄網(wǎng)站改版用戶體驗微信小程序

廣告

聲明:本網(wǎng)站發(fā)布的內(nèi)容(圖片、視頻和文字)以用戶投稿、用戶轉(zhuǎn)載內(nèi)容為主,如果涉及侵權(quán)請盡快告知,我們將會在第一時間刪除。文章觀點不代表本網(wǎng)站立場,如需處理請聯(lián)系客服。電話:028-86922220;郵箱:631063699@qq.com。內(nèi)容未經(jīng)允許不得轉(zhuǎn)載,或轉(zhuǎn)載時需注明來源: 創(chuàng)新互聯(lián)

h5響應(yīng)式網(wǎng)站建設(shè)