Android錯誤總結

來源:互聯網
上載者:User

標籤:


<span style="font-size:14px;"><code class="hljs http has-numbering" style="display: block; padding: 0px; color: inherit; box-sizing: border-box; font-family: 'Source Code Pro', monospace;font-size:undefined; white-space: pre; border-radius: 0px; word-wrap: normal; background: transparent;"><span class="hljs-attribute" style="box-sizing: border-box;">com.android.dex.DexException</span>: <span class="hljs-string" style="color: rgb(0, 136, 0); box-sizing: border-box;">Multiple dex files define Landroid/support/annotation/AnimRes;</span></code><ul class="pre-numbering" style="box-sizing: border-box; position: absolute; width: 50px; top: 0px; left: 0px; margin: 0px; padding: 6px 0px 40px; border-right-width: 1px; border-right-style: solid; border-right-color: rgb(221, 221, 221); list-style: none; text-align: right; background-color: rgb(238, 238, 238);"><li style="box-sizing: border-box; padding: 0px 5px;">1</li></ul><ul class="pre-numbering" style="box-sizing: border-box; position: absolute; width: 50px; top: 0px; left: 0px; margin: 0px; padding: 6px 0px 40px; border-right-width: 1px; border-right-style: solid; border-right-color: rgb(221, 221, 221); list-style: none; text-align: right; background-color: rgb(238, 238, 238);"><li style="box-sizing: border-box; padding: 0px 5px;">1</li></ul></span>

每次都要clean一下,然後才能編譯過,光這個過程就浪費了4/5分鐘。出現這個問題是因為最新的v4包(compile ‘com.Android.support:support-v4:22.2.1’)已經包含了annotation.jar這個包,但其他jar包裡也包含這個包造成的。而非同時包含了v4/V7造成的,所以一堆人說在v7包裡進行如下設定:

<span style="font-size:14px;"><code class="hljs cs has-numbering" style="display: block; padding: 0px; color: inherit; box-sizing: border-box; font-family: 'Source Code Pro', monospace;font-size:undefined; white-space: pre; border-radius: 0px; word-wrap: normal; background: transparent;">compile (<span class="hljs-string" style="color: rgb(0, 136, 0); box-sizing: border-box;">'com.android.support:appcompat-v7:22.2.1'</span>){        exclude <span class="hljs-keyword" style="color: rgb(0, 0, 136); box-sizing: border-box;">group</span>: <span class="hljs-string" style="color: rgb(0, 136, 0); box-sizing: border-box;">"com.android.support"</span>, module: <span class="hljs-string" style="color: rgb(0, 136, 0); box-sizing: border-box;">"support-v4"</span>    }</code><ul class="pre-numbering" style="box-sizing: border-box; position: absolute; width: 50px; top: 0px; left: 0px; margin: 0px; padding: 6px 0px 40px; border-right-width: 1px; border-right-style: solid; border-right-color: rgb(221, 221, 221); list-style: none; text-align: right; background-color: rgb(238, 238, 238);"><li style="box-sizing: border-box; padding: 0px 5px;">1</li><li style="box-sizing: border-box; padding: 0px 5px;">2</li><li style="box-sizing: border-box; padding: 0px 5px;">3</li></ul><ul class="pre-numbering" style="box-sizing: border-box; position: absolute; width: 50px; top: 0px; left: 0px; margin: 0px; padding: 6px 0px 40px; border-right-width: 1px; border-right-style: solid; border-right-color: rgb(221, 221, 221); list-style: none; text-align: right; background-color: rgb(238, 238, 238);"><li style="box-sizing: border-box; padding: 0px 5px;">1</li><li style="box-sizing: border-box; padding: 0px 5px;">2</li><li style="box-sizing: border-box; padding: 0px 5px;">3</li></ul></span>

即設定v7包不包含v4,這個設了也是沒用的。只要確保用v4和v7 的地方版本一致即可。正確的解決方案有如下幾種: 
1,找到項目其他的依賴包,一定在libs裡的某個jar包裡,隱藏著annotation.jar包,將其刪掉就ok了,此為最正統的解決方案; 
2,降級v4包,因為高版本的v4才包含annotation.jar,可以在最外面的build.grable裡強制設定:

<span style="font-size:14px;"><code class="hljs matlab has-numbering" style="display: block; padding: 0px; color: inherit; box-sizing: border-box; font-family: 'Source Code Pro', monospace;font-size:undefined; white-space: pre; border-radius: 0px; word-wrap: normal; background: transparent;">allprojects <span class="hljs-cell" style="box-sizing: border-box;">{    repositories {        jcenter()    }</span>    <span class="hljs-transposed_variable" style="box-sizing: border-box;">configurations.</span>all <span class="hljs-cell" style="box-sizing: border-box;">{        resolutionStrategy.force <span class="hljs-string" style="color: rgb(0, 136, 0); box-sizing: border-box;">'com.android.support:support-annotations:22.1.0'</span>    }</span>}</code><ul class="pre-numbering" style="box-sizing: border-box; position: absolute; width: 50px; top: 0px; left: 0px; margin: 0px; padding: 6px 0px 40px; border-right-width: 1px; border-right-style: solid; border-right-color: rgb(221, 221, 221); list-style: none; text-align: right; background-color: rgb(238, 238, 238);"><li style="box-sizing: border-box; padding: 0px 5px;">1</li><li style="box-sizing: border-box; padding: 0px 5px;">2</li><li style="box-sizing: border-box; padding: 0px 5px;">3</li><li style="box-sizing: border-box; padding: 0px 5px;">4</li><li style="box-sizing: border-box; padding: 0px 5px;">5</li><li style="box-sizing: border-box; padding: 0px 5px;">6</li><li style="box-sizing: border-box; padding: 0px 5px;">7</li><li style="box-sizing: border-box; padding: 0px 5px;">8</li></ul><ul class="pre-numbering" style="box-sizing: border-box; position: absolute; width: 50px; top: 0px; left: 0px; margin: 0px; padding: 6px 0px 40px; border-right-width: 1px; border-right-style: solid; border-right-color: rgb(221, 221, 221); list-style: none; text-align: right; background-color: rgb(238, 238, 238);"><li style="box-sizing: border-box; padding: 0px 5px;">1</li><li style="box-sizing: border-box; padding: 0px 5px;">2</li><li style="box-sizing: border-box; padding: 0px 5px;">3</li><li style="box-sizing: border-box; padding: 0px 5px;">4</li><li style="box-sizing: border-box; padding: 0px 5px;">5</li><li style="box-sizing: border-box; padding: 0px 5px;">6</li><li style="box-sizing: border-box; padding: 0px 5px;">7</li><li style="box-sizing: border-box; padding: 0px 5px;">8</li></ul></span>

3,在需要v4包的地方exclude掉annotation包,注意compile要多加個括弧:

<span style="font-size:14px;"><code class="hljs ruby has-numbering" style="display: block; padding: 0px; color: inherit; box-sizing: border-box; font-family: 'Source Code Pro', monospace;font-size:undefined; white-space: pre; border-radius: 0px; word-wrap: normal; background: transparent;"> compile (<span class="hljs-string" style="color: rgb(0, 136, 0); box-sizing: border-box;">'com.android.support:support-v4:22.2.1'</span>){        exclude <span class="hljs-class" style="box-sizing: border-box;"><span class="hljs-keyword" style="color: rgb(0, 0, 136); box-sizing: border-box;">module</span>: '<span class="hljs-title" style="box-sizing: border-box; color: rgb(102, 0, 102);">support</span>-<span class="hljs-title" style="box-sizing: border-box; color: rgb(102, 0, 102);">annotations</span>'</span>    }</code><ul class="pre-numbering" style="box-sizing: border-box; position: absolute; width: 50px; top: 0px; left: 0px; margin: 0px; padding: 6px 0px 40px; border-right-width: 1px; border-right-style: solid; border-right-color: rgb(221, 221, 221); list-style: none; text-align: right; background-color: rgb(238, 238, 238);"><li style="box-sizing: border-box; padding: 0px 5px;">1</li><li style="box-sizing: border-box; padding: 0px 5px;">2</li><li style="box-sizing: border-box; padding: 0px 5px;">3</li></ul><ul class="pre-numbering" style="box-sizing: border-box; position: absolute; width: 50px; top: 0px; left: 0px; margin: 0px; padding: 6px 0px 40px; border-right-width: 1px; border-right-style: solid; border-right-color: rgb(221, 221, 221); list-style: none; text-align: right; background-color: rgb(238, 238, 238);"><li style="box-sizing: border-box; padding: 0px 5px;">1</li><li style="box-sizing: border-box; padding: 0px 5px;">2</li><li style="box-sizing: border-box; padding: 0px 5px;">3</li></ul></span>

缺點是每個用v4包的地方都要這麼設定下。 
4,在application的build.gradle裡的dexOptions設定裡增加一句:preDexLibraries = false就ok了: 

PS:以上四種方法都可以解決問題,推薦正統的方法1和偷懶的方法4。

<span style="font-size:14px;"><pre name="code" class="javascript"></span>



1.使用LruCache來緩衝圖片的例子:(記憶體緩衝) 
http://www.cnblogs.com/lichenwei/p/4437773.html 
http://my.oschina.net/ryanhoo/blog/93406

3.java.lang.Runtime類中的freeMeory(),totalMemory(),MaxMemory() 
MaxMemory():返回這個進程從作業系統那裡挖到的最大的記憶體,以位元組為單位。 
totalMemory():返回這個進程當時所佔用的所有記憶體。 
freeMemory():當java程式啟動並執行過程中,記憶體總是慢慢的從作業系統那裡挖的,基本上是用多少挖多少,但是,java虛擬機器總是會多挖一些,這些多挖出來又沒有用上的記憶體,就是FreeMemory()返回的值,一般都比較小。

4.AsyncTask輕量級非同步類

5.MVC全名是Model View Controller,是模型(model)-視圖(view)-控制器(Cotroller)的縮寫,一種軟體設計典範,用一種商務邏輯、資料、介面顯示分離的方法組織代碼,將商務邏輯聚集到一個組件裡面,在改進和個人化定製介面及使用者互動的同時,不需要重新編寫商務邏輯。

6.ToggleButton、Switch、CheckBox和RadioButton都是繼承自Android.widget.CompoundButton,意思是可選擇的,因此它們的用法都很類似。CompoundButton有兩個狀態,分別是checked和not checked。

7.native關鍵字表示可以叫用作業系統的底層函數,那麼這樣的技術成為JNI技術(java Native Interface)

8.jre(java runtime environment,java運行環境),運行java程式所必須的環境集合,包括java虛擬機器(jvm)、java核心類庫和支援檔案。你所寫的java程式在經過javac編譯後會形成字元行檔案,這個java的中間檔案,電腦是看不懂得,而這個檔案是給jvm(java虛擬機器)用的。由jvm進行解釋後形成機器語言給電腦。而這個jvm就在jre中。 
jdk(java Development kit)是java語言的軟體開發套件。 
JDK包含的基本組件包括: 
javac-編譯器,將來源程式轉成位元組碼。 
jar-打包工具,將相關的類檔案打包成一個檔案 
javadoc-文檔產生器,從源碼注釋中提取文檔 
jdb-debugger,查錯工具 
java-運行編譯後的java程式(.class)


10.啟動Application時,系統會建立一個PID,即進程ID,所有的Activity就會在此進程上運行。那麼我們在Application建立的時候初始化全域變數,同一個應用的所有Activity都可以取到這些全域變數的值,換句話說,我們在某一個Activity中改變了這些全域變數的值,那麼在同一個應用的其他Activity中值就會改變。

11.在java中可有兩種方式實現多線程,一種是繼承Thread類,一種是實現Runnable介面;Thread類是在java.lang包中定義的。一個類只要繼承了Thread類同時覆寫了本類中的run方法就可以實現多線程操作了,但是一個類只能繼承一個父類這是此方法的局限。 
Thread 
http://www.jb51.net/article/37465.htm 
用run()調用的話,是先執行第一個,再執行第二個,沒有相互運行。也就是說,是同步的。 
用start()方法的話,程式是互動式啟動並執行。也就是說是非同步。

在實際開發中一個多線程的操作很少使用Thread類,而是通過Runnable介面完成。

Thread認識Runnable 並且知道Runnable 裡面有一個run方法. 一旦調用Thread的start方法,Runnable 方法裡的run就會被Thread自動運行。 所以,當我們把我們的類繼承(這裡應該叫實現介面)自Runnable 的時候,我們的程式就是屬於Runnable 一個類型的了。 雖然是Runnable 的子類,但人家認識你爸爸,當然也知道了你。

Runnable是一個介面,不是一個線程,一般線程會實現Runnable。所以如果我們使用匿名內部類是運行在UI主線程的,如果我們使用實現這個Runnable介面的線程類,則是運行在對應線程的。

首先說明Android的CPU分配的最小單元是線程,Handler一般是在某個線程裡建立的,因而Handler和Thread就是相互綁定的,一一對應。 
而Runnable是一個介面,Thread是Runnable的子類。所以說,他倆都算一個進程。

12.async非同步 
sync同步


13.關於 onresp 收不到返回的結果

在你的包名相應目錄下建立一個wxapi目錄,並在該wxapi目錄下新增一個WXEntryActivity類,該類繼承自Activity,並在manifest檔案裡面加上exported屬性,設定為true。 Android:exported="true"  android:exported
       這個屬性用於指示該服務是否能夠被其他應用程式組件調用或跟它互動。如果設定為true,則能夠被調用或互動,否則不能。設定為false時,只有同一個應用程式的組件或帶有相同使用者ID的應用程式才能啟動或綁定該服務。
  
實現IWXAPIEventHandler介面,發送的請求將回調到onReq方法,發送到請求的響應結果將回調到onResp方法。 
  
在WXEntryActivity中將接收到的intent及實現了IWXAPIEventHandler介面的對象傳遞給IWXAPI介面的handleIntent方法。當發送請求到你的應用,將通過IWXAPIEventHandler介面的onReq方法進行回調,類似的,應用請求的響應結果將通過onResp回調。  
  


Android錯誤總結

聯繫我們

該頁面正文內容均來源於網絡整理,並不代表阿里雲官方的觀點,該頁面所提到的產品和服務也與阿里云無關,如果該頁面內容對您造成了困擾,歡迎寫郵件給我們,收到郵件我們將在5個工作日內處理。

如果您發現本社區中有涉嫌抄襲的內容,歡迎發送郵件至: info-contact@alibabacloud.com 進行舉報並提供相關證據,工作人員會在 5 個工作天內聯絡您,一經查實,本站將立刻刪除涉嫌侵權內容。

A Free Trial That Lets You Build Big!

Start building with 50+ products and up to 12 months usage for Elastic Compute Service

  • Sales Support

    1 on 1 presale consultation

  • After-Sales Support

    24/7 Technical Support 6 Free Tickets per Quarter Faster Response

  • Alibaba Cloud offers highly flexible support services tailored to meet your exact needs.