導航:首頁 > 操作系統 > androidstudio多線程

androidstudio多線程

發布時間:2022-05-16 12:03:26

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 怎樣使用多線程

有兩種方式:

  1. new Thred類

  2. 用非同步任務的方法

❾ 如何加快Android Studio 編譯app 的速度

以下幾個方法可以提高Android Studio的編譯速度:

  1. 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的方法,你需要可以提~

閱讀全文

與androidstudio多線程相關的資料

熱點內容
python二次開發cad 瀏覽:302
程序員直播機器人舞團 瀏覽:767
devc指針編譯問題 瀏覽:998
支持dsd硬解壓音效卡 瀏覽:769
怎麼查看u盤加密區 瀏覽:182
台電加密是什麼格式 瀏覽:155
php論壇版塊在哪個文件夾 瀏覽:442
暗黑的伺服器為什麼維護 瀏覽:624
android內存溢出的原因 瀏覽:18
標志307的壓縮比是多少 瀏覽:636
伺服器啟動為什麼叫三聲 瀏覽:997
追風箏的人英文pdf 瀏覽:940
解壓小熊手機殼 瀏覽:347
成都市區建成面積演算法 瀏覽:662
智能家居單片機 瀏覽:98
買男裝用什麼app好 瀏覽:856
文件夾合並了怎麼拆開 瀏覽:262
波段副圖源碼無未來函數 瀏覽:91
livecn伺服器地址 瀏覽:259
程序員這個工作真的很吃香嗎 瀏覽:848