❶ android studio調試代碼有沒有運行
不管是什麼類型的編程語言,在程序開發中我們都難免會遇到各種各樣的bug,遇到bug相信大家最常用的調試手段應該就是日誌和debug了吧。其實除此之外還有很多代碼調試手段,本文是小編在一個android網站上面看到的,有關Android Studio開發工具中代碼調試相關技能技巧,在此分享給大家,一起來看看吧。
你知道上圖的三個斷點有什麼不同么?你有關注過Android Studio旁邊斷點的區別嗎?不了解也沒關系,下面就是一位Android大神和大家分享的Android Studio debug的相關知識,新技能get走起~~
調試基礎
一般來說有兩種辦法調試一個debuggable的apk;其一是下好斷點,然後用debug模式編譯安裝這個app;其二是 attach process ,在Android Studio裡面就是這么一個對話框:
第二種方法比較常用,我們可以在啟動apk之後,直接下斷點,然後attach process到制定進程,條件觸發之後就可以直接進入調試模式。
其他的一些單步執行, stepinto , step out , force step into 等就不提了;基本的跟蹤手段。而下斷點最簡單的辦法,是在代碼編輯器的左側,行號右邊滑鼠點擊一下即可。
Evaluate Expression
這個功能非常實用,可以在斷點處直接進入一個求值環境,在這里你可以執行任何你感興趣的表達式;如下圖:
比如在斷點處有一個對象
object,如果你要查看它的某個屬性很簡單,在Debug窗口就能看到,但是如果你想要執行它的某個方法看看結果是什麼呢?藉助這個可以實現。當然它
的功能遠不止這么多,相當於直接進入了一個 REPL 環境,非常實用。忘了說了,快捷鍵 Alt + F8 :P
條件斷點
假設你的斷點在一個列表的循環裡面,可是你只對這個列表的某一個元素感興趣,只想在遇
到這個元素的時候才斷下來;你是一直人肉 F9
直到滿足條件嗎?條件斷點就是滿足這種需求的,顧名思義,在特定條件下的斷點。使用起來也非常簡單,在你的斷點上滑鼠有件會出現一個小窗口,寫上條件即
可。
日誌斷點
很多時候我們調試更多的是列印日誌定位異常代碼,縮小范圍之後再使用斷點解決問題;所以經常做的事情就是在代碼裡面添加日誌信息,輸出函數參數,返回信息,輸出我們感興趣的變數信息等。
但是這么做一個問題就是,我們添加了日誌代碼需要重新編譯;在沒有 Instant Run 之前的黑暗時代這么做是非常痛苦的,每次編譯少則幾十秒,多則幾分鍾;這樣無意義的等待簡直就是折磨;其實,除了熱部署工具,我們還可以使用日誌斷點解決這個問題。
首先,在想要輸出信息的地方下一個斷點;然後右鍵這個斷點,在出現的設置框裡面把這個
斷點的 suspend 屬性設置為 False ,這樣雖然叫做「斷點」,但是並不會真正斷下來;然後,我們在 log message
裡面填上我們想要輸出的日誌信息。如下圖(注意標紅位置):
這樣,每次代碼執行到這個斷點的位置,並不會使我們的程序停下來,而是輸出我們告訴它的日誌信息,然後繼續執行;非常方便。
方法斷點
傳統的調試方式是以行為單位的,所謂單步調試;但是很多時候我們關心的是某個函數的參
數,返回值;使用方法斷點,我們可以在函數級別進行調試;如果經常跳進跳出函數或者只對某個函數的參數感興趣,這種類型的斷點非常實用。具體使用方法有兩
種方式;最簡單的是在你感興趣的方法頭那一行打上斷點,這時候你會發現斷點圖標有點不一樣,這就是方法斷點了,如下圖:
另外一種方式是通過 斷點設置窗口。
異常斷點
在有些情況下,我們只對某些特定的異常感興趣,或者我們只對異常感興趣;我們希望只要程序發生異常程序就能斷下來;這好像保存現場一樣,只要發生命案了(異常),第一時間保存現場,這樣什麼指紋之類的線索就會清晰很多,壞蛋就算想逃也是插翅難飛啊。
Android Studio給了我們這個能力!那就是 異常斷點 !可以在特定異常發生的時候,直接讓整個程序斷下來;如果你對所有異常感興趣,直接 Throwable 即可。
具體做法是,進入 Run ->View BreakPoints 或者使用快捷鍵打開斷點設置窗口;如下圖:
點擊左上角的:heavy_plus_sign: ,會出現一個選擇框;選擇 Exception Breakpoint ;然後會出現一個對話框,選擇你感興趣的異常:
Field WatchPoint
在上面我們添加異常斷點的時候,點擊加號的時候,有四個選項;第一個就是我們前面所說的第二種方法斷點的添加方式,第三個是異常斷點,那麼第二個 Field WatchPoint 是干什麼的呢?
有沒有這樣一種場景:你發現某個值莫名其妙滴不知道什麼時候被誰給修改了,罪魁禍首是
誰?java雖然是值傳遞,但是引用也可以是值;對象全部存放在堆上面,而堆是被所有線程共享的,因此在非常復雜的場景下,你根本不知道這些共享變數被誰
修改了,這樣非常危險;在多線程環境下,不變性是一個很重要的特性,我們看到高並發的語言諸如 Erlang , Scala
對於這種不變性都有著某種程度的支持。
那麼我們怎麼揪出這個修改我們值的搗蛋鬼呢?那就是這個 Field WatchPoint 的功能了;使用它我們可以在某個 Field 被訪問或者修改的時候讓程序斷下來;完美解決這個問題。
下斷點的方式和方法斷點類似,也有兩種;第一種是直接在某個欄位的聲明處下斷點,這時候斷點圖標會改變,如下圖:
右鍵這個斷點我們可以進行一些設置,比如默認是被修改的時候斷下來,你也可以改為每次訪問這個欄位就斷下來。
另外一種方式是 Run ->View BreakPoint 打開設置,與異常斷點類似。
結束語
上面介紹了這么多代碼調試的功能,其實還有很多細節;打開斷點設置窗口(Run -> View Breakpoint`):
我們可以對 感興趣的類,感興趣的某個特定對象下斷點,也可以設置斷點的次數,還能使斷點在特定的線程才斷下來;這些細節就不詳細介紹了,大家自己去發掘!
以上就是Android Studio中一些超有用的調試技巧,大家在代碼調試中,不妨可以試試上述方法,希望通過本文的分享,大家也能和我一樣收獲頗多。
❷ 在Android Studio中可以創建兩個線程池嘛
當然可以,一般引入的第三方庫都有自己的線程池,所以線程池是可以創建多個的
❸ Android studio使用Retrofit框架,Get發送請求,Gson解析返回的json數據時報錯怎麼辦
資料庫一直以來給我的感覺就是——麻煩!!!
接觸了Realm之後才終於可以開開心心的使用資料庫了。
本文總結一些Realm資料庫的常用知識點,包括多線程訪問,以及如何與Retrofit2.0一起使用等...
看懂這些知識點之後,個人認為就可以在一般的項目中使用Realm了。
1. model類必須extends RealmObject,所有屬性必須用private修飾
2. model中支持基本數據結構:boolean, byte, short, ìnt, long, float, double, String, Dateand byte[]
3.若要使用List必須用RealmList<T>,或者繼承RealmList
4.與Retrofit2.*一起使用,通過Gson來解析Json數據並直接生成RealmObject,可參考如下寫法:
[java] view plain
Gson gson = new GsonBuilder()
.setExclusionStrategies(new ExclusionStrategy() {
@Override
public boolean shouldSkipField(FieldAttributes f) {
return f.getDeclaringClass().equals(RealmObject.class);
}
@Override
public boolean shouldSkipClass(Class<?> clazz) {
return false;
}
❹ 為什麼我只要在android studio中加入線程就會程序就會閃退
常見的原因就是在線程中做了修改UI的操作,當然還可能是其他原因,視具體錯誤而定
❺ Android Studio和IntelliJ IDEA的不同點在什麼地方
兩者不同點在於支持的開發環境和開發公司不同。
1、開發的公司不同
Android Studio是谷歌開發的Android開發插件。
IntelliJ IDEA是JetBrains公司推出的Java集成開發環境。
2、支持的開發環境不同
Android Studio只支持Android開發,是谷歌在IntelliJ IDEA社區版上剔除其他功能的一款專注Android開發的插件,可以說是弱化版的IntelliJ IDEA。
IntelliJ IDEA是JetBrains公司推出的Java集成開發環境,當然Android也是基於java的,IntelliJ IDEA除了支持Android開發,還支持JavaSE,Android,Groovy,Scale,HTML,CSS,PHP等語言的開發。
(5)androidstudio多線程擴展閱讀:
IntelliJ IDEA優點:
1、最突出的功能自然是調試(Debug),可以對Java代碼,JavaScript,JQuery,Ajax等技術進行調試。
2、查看Map類型的對象,如果實現類採用的是哈希映射,則會自動過濾空的Entry實例。
3、需要動態Evaluate一個表達式的值,比如我得到了一個類的實例,但是並不知曉它的API,可以通過Code Completion點出它所支持的方法。
4、最後,在多線程調試的情況下,Log on console的功能可以幫你檢查多線程執行的情況。
在IDEA的基礎上,Android Studio 提供:
1、基於Gradle的構建支持
2、Android 專屬的重構和快速修復
3、提示工具以捕獲性能、可用性、版本兼容性等問題
4、支持ProGuard 和應用簽名
5、基於模板的向導來生成常用的 Android 應用設計和組件
6、功能強大的布局編輯器,可以讓你拖拉 UI 控制項並進行效果預覽
❻ android studio 支持多少線程
Android Studio 是一個Android開發環境,基於IntelliJ IDEA. 類似 Eclipse ADT,Android Studio 提供了集成的 Android 開發工具用於開發和調試。
在IDEA的基礎上,Android Studio 提供 :
1. 基於Gradle的構建支持。
2. Android 專屬的重構和快速修復。
3. 提示工具以捕獲性能、可用性、版本兼容性等問題。
4. 支持ProGuard 和應用簽名。
5. 基於模板的向導來生成常用的 Android 應用設計和組件。
6. 功能強大的布局編輯器,可以拖拉 UI 控制項並進行效果預覽。
❼ android studio ndk 開發怎麼開一個子線程
建立項目,並設置activity.xml布局文件,這一點與普通編程沒有不同。通過一個簡單的文本展示實驗。
在MainActivity中添加native介面,並載入.so庫
生成項目的.class文件。首先選中項目後,在菜單欄選擇Build-->Make Project。
Make之後,將生成.class文件,生成的.class文件位於app_path/build/intermediates/classes/debug/包名
利用javah生成C頭文件:點擊"View->Tool Windows->Terminal",即在Studio中進行終端命令行工具。在控制台中通過命令「cd app\src\main\java」,進入到java目錄下。操作指令:javah -d ../jni vrlab.ndkdemoforandroidstudio.MainActivity。此時在main目錄下生成一個jni文件夾,其中在jni文件夾中有生成的.h頭文件。
編輯C文件,在jni文件夾下新建文件命名為main.c。並在該文件中導入需要的頭文件,實現上一步生成的頭文件中的方法。
配置NDK路徑,在local.properties中指明sdk和ndk路徑:
設置ndk參數,名字、發布平台等。在應用目錄下的build.gradle中defaultConfig中設置
生成.so文件,此時再次選擇Build-->Build Project就可以生成so文件了。出現不支持NDK的錯誤提示,不過跟著錯誤提示修改:在項目空間下的gradle.properties中添加android.useDeprecatedNdk=true。
針對三種不同的CPU生成了三種不同的.so文件。生成的.so文件位於app_path/build/intermediates/ndk/debug/lib.
安裝運行~~去吧,皮卡丘
❽ android studio 怎樣使用多線程
有兩種方式:
new Thred類
用非同步任務的方法
❾ 如何加快Android Studio 編譯app 的速度
以下幾個方法可以提高Android Studio的編譯速度:
使用Gradle 2.4。
Gradle 2.4對執行性能有很大的優化,要手動讓Android Studio使用Gradle 2.4,在項目根目錄下的 build.grade中加入。
❿ Android studio線程
第一步,你先獲取進度條對象
ProgressBarpb=newProgressBar(getApplicationContext());//動態創建
//ProgressBarpb=findViewById(R.id.pb);//靜態獲取
第二步,你得先創建一個子線程,子線程直接設置進度條
Threadthread=newThread(newRunnable(){
@Override
publicvoidrun(){
for(inti=0;i<100;i++){
finalintfinalI=i;
pb.setProgress(i);
}
}
});
第三步,你得建立與main主線程的通信,兩種方式選其一,我選個最簡單的,使用系統提供的runOnUiThread函數,傳遞你第一步創建的子線程,作為參數即可
runOnUiThread(thread);
大功告成!
——
還有一種handler的方法,你需要可以提~