導航:首頁 > 操作系統 > android對話框阻塞

android對話框阻塞

發布時間:2023-04-09 12:27:38

android surfaceview 會不會阻塞ui線程

系統不會為每個組件單獨創建線程,在同一個進程里的UI組件都會在UI線程里實例咐侍化,系統對每一個組件的調用賣橘都從UI線程分發出去。
結果就是,響應系統回調的方法(比如響應用戶動作的onKeyDown()和各種生命周期回調)永遠都是在UI線程里運行。

當App做一些比較重(intensive)的工作的時候,除非你合理地實現,否則單線程模型的performance會很poor。
特別的是,如果所有的工作都在UI線程,做一些比較耗時的工作比如訪問網路或者資料庫查詢,都會阻塞UI線程,導致事件停止分發(包括繪制事件)。對於用戶來說,應用看起來像是卡住了,更壞的情況是,如果UI線程blocked的時間太長(大約超過5秒),用戶就會看到ANR(application not responding)的對話框。
另外,Andoid UI toolkit並不是線程安全的,所衡配吵以你不能從非UI線程來操縱UI組件。你必須把所有的UI操作放在UI線程里,所以Android的單線程模型有兩條原則:
1.不要阻塞UI線程。
2.不要在UI線程之外訪問Android UI toolkit(主要是這兩個包中的組件:android.widget andandroid.view)。

Ⅱ Android如何避免ANR

ANR:Application Not Responding,五秒在Android中,活動管理器和窗口管理器這兩個系統服務負責監視應用程序的響應。當出現下列情況時,Android就會顯示ANR對話框了: 對輸入事件(如按鍵、觸摸屏事件)的響應超過5秒 意向接受器(intentReceiver)超過10秒鍾仍未執行完畢
Android應用程序完全運行在一個獨立的線程中(例如main)。這就意味著,任何在主線程中運行的,需要消耗大量時間的操作都會引發ANR。因為此時,你的應用程序已經沒有機會去響應輸入事件和意向廣播(Intent broadcast)。 因此,任何運行在主線程中的方法,都要盡可能的只做少量的工作。特別是活動生命周期中的重要方法如onCreate()和 onResume()等更應如此。潛在的比較耗時的操作,如訪問網路和資料庫;或者是開銷很大的計算,比如改變點陣圖的大小,需要在一個單獨的子線程中完成(或者是使用非同步請求,如資料庫操作)。但這並不意味著你的主線程需要進入阻塞狀態已等待子線程結束 -- 也不需要調用Therad.wait()或者Thread.sleep()方法。取而代之的是,主線程為子線程提供一個句柄(Handler),讓子線程在即將結束的時候調用它(xing:可以參看Snake的例子,這種方法與以前我們所接觸的有所不同)。使用這種方法涉及你的應用程序,能夠保證你的程序對輸入保持良好的響應,從而避免因為輸入事件超過5秒鍾不被處理而產生的ANR。這種實踐需要應用到所有顯示用戶界面的線程,因為他們都面臨著同樣的超時問題。

Ⅲ android中Dialog和PopupWindow的區別

Android中的對話框有兩種:PopupWindow和AlertDialog。它們都可以實現彈窗功能,但是他們之間有一些差別,下面總結了一點。 (1)Popupwindow在顯示之前一定要設置寬高,Dialog無此限制。 (2)Popupwindow默認不會響應物理鍵盤的back,除非顯示設置了popup.setFocusable(true);而在點擊back的時候,Dialog會消失。 (3)Popupwindow不會給頁面其他的部分添加蒙層,而Dialog會。 (4)Popupwindow沒有標題,Dialog默認有標題,可以通過dialog.requestWindowFeature(Window.FEATURE_NO_TITLE);取消標題 (5)二者顯示的時候都要設置Gravity。如果不設置,Dialog默認是Gravity.CENTER。 (6)二者都有默認的背景,都可以通過setBackgroundDrawable(new ColorDrawable(android.R.color.transparent));去掉。 其中最本質的差別就是:AlertDialog是非阻塞式對話框:AlertDialog彈出時,後台還可以做事情;而PopupWindow是阻塞式對話框:PopupWindow彈出時,程序會等待,在PopupWindow退出前,程序一直等待,只有當我們調用了dismiss方法的後,PopupWindow退出,程序才會向下執行。這兩種區別的表現是:AlertDialog彈出時,背景是黑色的,但是當我們點擊背景,AlertDialog會消失,證明程序不僅響應AlertDialog的操作,還響應其他操作,其他程序沒有被阻塞,這說明了AlertDialog是非阻塞式對話框;PopupWindow彈出時,背景沒有什麼變化,但是當我們點擊背景的時候,程序沒有響應,只允許我們操作PopupWindow,其他操作被阻塞。 我們在寫程序的過程中可以根據自己的需要選擇使用Popupwindow或者是Dialog。

Ⅳ android 彈出輸入框並得到輸入框的結果

不用找了,這才是正解。你的需求其實是,需要一個阻塞式對話框,安頌旁滾卓啟備本身所有彈窗都是非阻塞的。

import android.app.Activity;

import android.app.AlertDialog;

import android.content.DialogInterface;

import android.os.Handler;

import android.os.Looper;

import android.os.Message;

import android.widget.EditText;

/**

* 動態獲取用戶輸入後在繼續野余後面的流程

* 這是一個模態阻塞對話框(阻塞主線程,結果不用回調來處理)

*/

public class BlockingInputDialog {

String mInputString = "";

Activity mContext;

String mTitle;

EditText mEditText;

Handler mHandler;

public BlockingInputDialog(Activity context, String title){

mContext = context;

mTitle = title;

}

public String showDialog(){

mHandler = new Handler(){

@Override

public void handleMessage(Message msg) {

//super.handleMessage(msg);

throw new RuntimeException();

}

};

AlertDialog.Builder builder = new AlertDialog.Builder(mContext);

builder.setTitle(mTitle);

builder.setCancelable(false);

mEditText = new EditText(mContext);

builder.setView(mEditText);

builder.setPositiveButton("確定", new DialogInterface.OnClickListener() {

@Override

public void onClick(DialogInterface dialogInterface, int i) {

mInputString = mEditText.getText().toString();

Message message = mHandler.obtainMessage();

mHandler.sendMessage(message);

}

});

builder.setNegativeButton("取消", null);

builder.create().show();

try {

Looper.getMainLooper().loop();

}

catch(RuntimeException e2)

{

}

return mInputString;

}

}

Ⅳ Android中Popupwindow和Dialog的區別

除了外觀樣式和顯示的位置的區別之外,他們之間最本質的區別是:
dialog是非阻塞式對話框,popupwindow是阻塞式對話框。也就是說dialog彈出時
後台還可以進行很多的操作,而popupwindow彈出是
後台進程是阻塞的,要一直等待popupwindow
消失
才會進行操作。

Ⅵ android中如何實現彈出一個阻塞線程的對話框

Android裡面的這個阻塞和以前我們在C++裡面的理解有點不一樣.
C++裡面的阻塞就是整個程序都停在那了,不辯李往下走.
但是在Android裡面,它只是把窗口困悶彈出來攜尺遲,放到最上面.但是程序還是會繼續往下走的.....

Ⅶ Android為什麼UI線程阻塞 5s 以上 不出現ANR

因為有些模滾手機有設置
如三敬冊星的手亮碼宏機->設定->開發者選項->顯示全部ANR.

Ⅷ TCL智能電視彈出對話框抱歉"android.process.acore"已停止運行怎麼解決

android.process.acore是安卓智能電視的基礎應用,出現該提示一般是因為該沒顫應用沒有啟動或者意外關閉,導致所有依賴該應用的其他功能都無法使用,電視機就會一直出現「android.process.acore已停止運行」的提示信息。解決方法如下:x0dx0a1、一般先將電視機重啟,如果能夠進入電視機的系統界面,可以打開系統設置,執行系統還原或系統升級,把電視機的系統恢復為出廠設置狀態或者桐攔升級到最新版本。x0dx0a2、如果重枯輪敗啟多次仍無法進入系統,則只能聯系電視機的售後服務告知故障表現,由其安排專業人員上門為用戶檢測並刷入新系統。x0dx0a3、如果檢測出是硬體出現故障導致該問題的,也需要聯系售後服務對電視機進行檢修才能解決。

Ⅸ 如何阻止android 系統對話框彈出

android 彈出對話框後要實現不能回退 ,可以重寫在這個activity中的 back鍵的事件處理,讓back不響應。
public boolean dispatchKeyEvent(android.view.KeyEvent event) {
switch(event.getKeyCode())
{
case KeyEvent.KEYCODE_BACK:
{
return false;
}
}
return true;
};
這樣點擊返回鍵就實現了禁止回退。

Ⅹ android 如何讓整個界麵灰掉不可用

彈出一個自定義對話框讓原來的那個Activity進入阻塞狀態就可以

閱讀全文

與android對話框阻塞相關的資料

熱點內容
pdf閱讀器刪除 瀏覽:975
考研人如何緩解壓力 瀏覽:822
買電暖壺哪個app便宜 瀏覽:505
洛克王國忘記伺服器了怎麼辦 瀏覽:782
為什麼cf登錄伺服器沒反應 瀏覽:695
伺服器如何獲取文件列表 瀏覽:672
creo五軸編程光碟 瀏覽:14
蘋果app網路驗證在哪裡 瀏覽:14
博科清空命令 瀏覽:384
簡愛英文pdf 瀏覽:376
cnc編程有前途嗎 瀏覽:586
聯想app怎麼聯網 瀏覽:722
linuxftp命令登錄 瀏覽:1000
android獲取圖片縮略圖 瀏覽:646
神戶制鋼螺桿壓縮機 瀏覽:29
差分演化演算法 瀏覽:567
中山市加密軟體 瀏覽:446
mc反編譯源碼 瀏覽:141
企業商城網站源碼 瀏覽:411
shell腳本編程是什麼 瀏覽:762