導航:首頁 > 操作系統 > android多線程調試

android多線程調試

發布時間:2022-05-28 12:07:27

1. 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 控制項並進行效果預覽。

2. android在activity啟用線程,沒有出錯,調試過了,不執行run()方法,附上代碼。

我 直接給你上代碼了,你看看線程是怎麼用的,希望你自己學會他!
public void OnClick(){
MyThread t1=new MyThread();
t1,start();
}

class MyThread implements Runnable {
public void run() {
你的代碼

}
}

3. 如何理解android多線程里的getLooper方法

下面的代碼是學習Handler.post方法的,第一種寫法沒有使用getLooper,結果運行的效果是一個線程,第二種寫法使用了getLooper,運行的效果是多線程的:
package com.WriteCode.AndroidHandlerPost;

import android.app.Activity;
import android.os.Bundle;
import android.os.Handler;
import android.os.HandlerThread;
import android.util.Log;

public class AndroidHandlerPost extends Activity {

private Handler mHandler = null;

/** Called when the activity is first created. */
@Override
public void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);

//第一種寫法beg,不使用getLooper,那麼整個是一個線程(UI線程)
//mHandler = new Handler();
//第一種寫法end,不使用getLooper,那麼整個是一個線程(UI線程)

//第二種寫法beg,不使用getLooper,那麼整個是兩個線程
HandlerThread handlerThread = new HandlerThread("myHandlerThread");
handlerThread.start();
mHandler = new Handler(handlerThread.getLooper());
//第二種寫法end,不使用getLooper,那麼整個是兩個線程

mHandler.post(new MyRunnable());

Log.e("OnCreate", "The Thread is: " + Thread.currentThread().getId());

setContentView(R.layout.main);
}

private class MyRunnable implements Runnable
{

@Override
public void run() {
// TODO Auto-generated method stub
Log.e("Runnable", "The Thread is running");
Log.e("Runnable", "The Thread is: " + Thread.currentThread().getId());
try
{
Thread.sleep(6000);
}
catch (InterruptedException e)
{
e.printStackTrace();
}
}

}
}

4. Android中線程與線程,進程與進程之間如何通信

使用handler發送message,消息隊列排隊

進程是一個具有獨立功能的程序關於某個數據集合的一次運行活動。它可以申請和擁有系統資源,是一個動態的概念,是一個活動的實體。它不只是程序的代碼,還包括當前的活動,通過程序計數器的值和處理寄存器的內容來表示。
進程是一個「執行中的程序」。程序是一個沒有生命的實體,只有處理器賦予程序生命時,它才能成為一個活動的實體,我們稱其為進程。
通常在一個進程中可以包含若干個線程,它們可以利用進程所擁有的資源。在引入線程的操作系統中,通常都是把進程作為分配資源的基本單位,而把線程作為獨立運行和獨立調度的基本單位。由於線程比進程更小,基本上不擁有系統資源,故對它的調度所付出的開銷就會小得多,能更高效的提高系統內多個程序間並發執行的程度。
線程和進程的區別在於,子進程和父進程有不同的代碼和數據空間,而多個線程則共享數據空間,每個線程有自己的執行堆棧和程序計數器為其執行上下文。多線程主要是為了節約CPU時間,發揮利用,根據具體情況而定。線程的運行中需要使用計算機的內存資源和CPU。

5. android怎麼調試多線程,Log大法嗎,太苦逼了吧


  1. 多線程調試有點特殊,一個線程阻塞後,其他還在運行。

  2. 如果調試不擔心並發問題,可以使用debug

  3. 否則還是log列印好

  4. 其實做程序員本身就很苦

6. android客戶端進行多線程編程的基本流程是怎樣的

話分兩頭:
第一:從RecentApp界面被劃掉後,系統做了什麼:
系統將這個應用的UI線程殺死,並將此應用當前所分配的內存空間回收。
第二:為什麼系統將UI線程殺死,將內存回收後,程序還能繼續工作?比如音樂還在繼續響起:
這是因為有一類應用,為了當用戶將此應用的界面調到後台後,仍然是可以工作,這些應用都會在後台開一個Service,你可以理解為一個區別於UI線程的另一個線程,它可以獨立於UI線程之外,當UI線程被掛起或者銷毀時,它可以接替UI線程的工作,讓程序員繼續work。所以,為什麼有時候程序被從Recent列表中刪除後,程序沒有停止,這里的停止,實質上是程序的某一功能沒有停止,比如音樂,而此時的程序UI界面以及其它無關的內存已經被告系統回收了。
第三:如何讓自己的應用不出現在Recent列表裡:

7. 安卓在多線程編程中怎樣保證線程安全

1.將整個類加鎖 (代碼為synchronized(this))
2.定義一個object,訪問某些相關變數是,對該對象加鎖(代碼為synchronized(lockobj))。
新應用發布前如條件允許,最好做一下代碼混淆,市面上各種外掛或者篡改數據什麼的也比較常見,避免被破解利用。可以在一定程度上保護自己核心代碼演算法,提高破解/盜版/二次打包的難度,緩解代碼注入/動態調試/內存注入攻擊等
但也對應用的兼容性有一定影響,加殼技術不行的話,還會影響程序運行效率.
目前市面上有很多第三方加殼的平台, 如果應用需要加殼要選擇的話,可以先試試免費的,例如騰訊御安全,建議先去加固個包測試下兼容性。

8. 如何調試分析Android中發生的tombstone

Android Tombstone/Crash的log分析和定位
有一句話叫做常在河邊走,哪有不濕鞋。我們這些研究和開發Android的工程師正應了這句話,相必大家在調試的時候經常會遇到這么個東西吧
*** *** *** *** *** *** *** *** *** *** *** *** *** *** *** ***
Build fingerprint: 'XXXXXXXXX'
pid: 1658, tid: 13086 >>> system_server <<<
signal 11 (SIGSEGV), code 1 (SEGV_MAPERR), fault addr 64696f7e
r0 00000000 r1 00000001 r2 ad12d1e8 r3 7373654d
r4 64696f72 r5 00000406 r6 00974130 r7 40d14008
r8 4b857b88 r9 4685adb4 10 00974130 fp 4b857ed8
ip 00000000 sp 4b857b50 lr afd11108 pc ad115ebc cpsr 20000030
d0 4040000040000000 d1 0000004200000003 d2 4e72cd924285e370 d3 00e81fe04b1b64d8
d4 3fbc71c7009b64d8 d5 3fe999999999999a
d6 4010000000000000 d7 4000000000000000
d8 4000000000000000 d9 0000000000000000
d10 0000000000000000 d11 0000000000000000
d12 0000000000000000 d13 0000000000000000
d14 0000000000000000 d15 0000000000000000
scr 80000012
#00 pc 000108d8 /system/lib/libc.so #01 pc 0003724c /system/lib/libxvi020.so #02 pc 0000ce02 /system/lib/libxvi020.so #03 pc 0000d672 /system/lib/libxvi020.so #04 pc 00010cce /system/lib/libxvi020.so #05 pc 00004432 /system/lib/libwimax_jni.so #06 pc 00011e74 /system/lib/libdvm.so #07 pc 0004354a /system/lib/libdvm.so #08 pc 00017088 /system/lib/libdvm.so #09 pc 0001c210 /system/lib/libdvm.so #10 pc 0001b0f8 /system/lib/libdvm.so

#11 pc 00059c24 /system/lib/libdvm.so
#12 pc 00059e3c /system/lib/libdvm.so
#13 pc 0004e19e /system/lib/libdvm.so
#14 pc 00011b94 /system/lib/libc.so
#15 pc 0001173c /system/lib/libc.so
code around pc: ad115e9c 4620eddc bf00bd70 0001736e 0001734e
ad115eac 4605b570 447c4c0a f7f44620 e006edc8 ad115ebc 42ab68e3 68a0d103 f7f42122 6864edd2 ad115ecc d1f52c00 44784803 edbef7f4 bf00bd70 ad115edc 00017332 00017312 2100b51f 46682210 code around lr: afd110e8 e2166903 1a000018 e5945000 e1a02004 afd110f8 e2055a02 e1a00005 e3851001 ebffed92 afd11108 e3500000 13856002 1a000001
ea000009 afd11118 ebfffe50 e1a01004 e1a00006 ebffed92 afd11128 e1a01005 e1550000 e1a02006 e3a03000 stack: 4b857b10 40e43be8 4b857b14 00857280 4b857b18 00000000 4b857b1c 034e8968 4b857b20 ad118ce9 /system/lib/libnativehelper.so
4b857b24 00000002 4b857b28 00000406 .....
初一看到直接崩潰,我的個媽,這么一大坨,啥玩意啊,完全搞不懂,沒有頭緒撒。這NND Android出了問題,冒出這么大堆的地址,搞毛呢。

其實, 我可以很負責任的告訴你,兄弟這么多其實我也看不懂,在我眼裡除了紅色和藍色的地方,其他全是廢話。因為除了這兩個地方意外,其他的我確實看不懂,一堆線性地址,外加寄存器,跟火星文一樣。 算了,廢話不多少,直接分析: 1 紅色的地方,是讓我們確認問題到底發生在那個線程中,是主線程還是子線程,這個的判斷依據是:如果PID和TID相同,恭喜你問題出在父親這邊,看樣子問題還比較好辦。如果PID和TID不相同,那麼您悲劇了,問題出在子線程中。根據我的經驗,100的tombstone中,問題出現在父線程的概率,我還從來沒發現,尤其是什麼system_server, zygote這些,基本都是兒子的問題。唉,誰叫父親英雄,兒狗熊呢。。。 2 確認了問題的基本點,下面就是開始看藍色的部分了。 這個藍色不分是從#00-->#XX 表面上看是從上往下的增長,其實坑爹啊,它所顯示的程序的執行流程,恰恰是從下往上的也就是實際的執行順序是#XX-->#00。 所以一開始我們的目的是分析第一個出現問題的動態連接庫 #15 pc 0001173c /system/lib/libc.so a 首先按圖索驥,找到你的目標,libc.so這個一般會在你編譯完的目標目錄下,也就是out/target/proct/your_pro/system/lib這個目錄下。 b 一般你如果用的是還像樣的linux系統,會有個地址解析的命令addr2line,負責解析動態連接庫的(如果你是悲劇,沒有這個命令,那好吧, google早就預料到會有象你這樣的悲劇人,他們在prebuilt/linux-x86/toolchain/arm-eabi-4.4.0/bin/arm-eabi-addr2line,給您准備了個,咋就用這個吧,功能一樣,沒啥區別) addr2line -e -f libc.so 0001173c 紅色是你的目標庫,綠色是你出問題的地址,看看#15這行 結果出現:??pthread_create ??:0 恩,好了問題應該出在這個函數中,認為大功告成了?我,呸,還早呢。這個只是告訴你函數入口,至於具體執行到這個函數的哪個地方掛了,還得再看。 c 找到了是哪個部分出了問題,下面就是開啟顯微鏡,看看誰搞的東東。

9. 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等語言的開發。

(9)android多線程調試擴展閱讀:

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 控制項並進行效果預覽

10. 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多線程調試相關的資料

熱點內容
自己購買雲主伺服器推薦 瀏覽:422
個人所得稅java 瀏覽:761
多餘的伺服器滑道還有什麼用 瀏覽:192
pdf劈開合並 瀏覽:28
不能修改的pdf 瀏覽:752
同城公眾源碼 瀏覽:489
一個伺服器2個埠怎麼映射 瀏覽:298
java字元串ascii碼 瀏覽:79
台灣雲伺服器怎麼租伺服器 瀏覽:475
旅遊手機網站源碼 瀏覽:332
android關聯表 瀏覽:946
安卓導航無聲音怎麼維修 瀏覽:333
app怎麼裝視頻 瀏覽:431
安卓系統下的軟體怎麼移到桌面 瀏覽:96
windows拷貝到linux 瀏覽:772
mdr軟體解壓和別人不一樣 瀏覽:904
單片機串列通信有什麼好處 瀏覽:340
游戲開發程序員書籍 瀏覽:860
pdf中圖片修改 瀏覽:288
匯編編譯後 瀏覽:491