亚洲在线久爱草,狠狠天天香蕉网,天天搞日日干久草,伊人亚洲日本欧美

為了賬號安全,請及時綁定郵箱和手機立即綁定
已解決430363個問題,去搜搜看,總會有你想問的

Android:在什么情況下出現對話框會導致調用onPause()?

Android:在什么情況下出現對話框會導致調用onPause()?

慕婉清6462132 2019-12-17 14:38:30
Android Activities文檔中的一個片段(向下滾動到“ 前臺壽命 ”行)說:活動可以頻繁地切換到前臺和從前臺跳出,例如,onPause()當設備進入睡眠狀態或出現對話框時,將調用該活動。我不太明白這一點。在什么情況下會發生這種情況?被onPause()稱為僅如果有問題的對話的上下文是從頂部其活性的對話框將顯示不同?編輯:添加代碼示例以詳細說明我的疑問根據文檔中的上述引用,onPause()當顯示以下代碼中的AlertDialog(或只是Dialog)時,是否應該調用我的活動的方法?顯示對話框時,我是否應該看到“ onPause named”日志條目?但我看不到這種情況。如果我正確理解了Android的生命周期,那么也不應該!那么,當時的文件指向什么呢?public class LifeCycleTestActivity extends Activity {    private static final String TAG = "LifeCycleTest";    /** Called when the activity is first created. */    @Override    public void onCreate(Bundle savedInstanceState) {        super.onCreate(savedInstanceState);        setContentView(R.layout.main);        Button btn = (Button) findViewById(R.id.button1);        btn.setOnClickListener(new OnClickListener() {            @Override            public void onClick(View v) {                Log.d(TAG, "onClick");                AlertDialog dialog = new AlertDialog.Builder(LifeCycleTestActivity.this).create();                 dialog.setMessage("You Clicked on the button");                 dialog.setTitle("Dialog!");                 dialog.setButton(AlertDialog.BUTTON_NEUTRAL, "OK", new DialogInterface.OnClickListener() {                    @Override                    public void onClick(DialogInterface dialog, int which) {                        dialog.dismiss();                    }                });                 dialog.setCancelable(true);                 dialog.show();                /*                Dialog dialog = new Dialog(LifeCycleTestActivity.this);                 dialog.setTitle("Dialog!");                 dialog.setCancelable(true);                 dialog.show();                */            }        });            }    @Override    protected void onPause() {        Log.d(TAG, "onPause() called");        super.onPause();    }    @Override    protected void onResume() {        super.onResume();        Log.d(TAG, "onResume() called");    }}
查看完整描述

3 回答

?
臨摹微笑

TA貢獻1982條經驗 獲得超2個贊

onPause()當您的活動不再位于活動堆棧的頂部時,將調用。對話框本身不是活動,因此不會替換堆棧頂部的當前活動,因此不會導致任何暫停。

但是,對話框(小寫)不需要由Dialog類實現。例如,用Activity的主題設置為對話框主題的方法來實現它并不罕見。在這種情況下,顯示“ 活動為對話框”將使新的活動位于堆棧的頂部,暫停先前的活動。


查看完整回答
反對 回復 2019-12-17
?
小唯快跑啊

TA貢獻1863條經驗 獲得超2個贊

錯誤的是,活動在onPause階段不再保留在活動堆棧的頂部。

將活動設置為暫停狀態-

  • 活動部分可見,例如活動對話框。

  • Activity對象保留在內存中,它維護所有狀態和成員信息,并保持與窗口管理器的連接。

    例如,按下主頁按鈕會導致活動進入onPause()。仍然在堆棧頂部。

在圖1中。Activity3將被銷毀并從頂部堆棧中移除

在圖2中?,F在,任務A進入后臺,但Activty X仍位于堆棧頂部。如果您在此狀態下重寫onPause()方法


http://img1.sycdn.imooc.com//5df878120001807606170195.jpg

圖1.任務中每個新活動如何將項目添加到后臺堆棧的表示。當用戶按下“后退”按鈕時,當前活動將被銷毀并且上一個活動將恢復。


http://img1.sycdn.imooc.com//5df8781b000154ce02770148.jpg

圖2.兩個任務:任務B在前臺接收用戶交互,而任務A在后臺等待恢復。


查看完整回答
反對 回復 2019-12-17
  • 3 回答
  • 0 關注
  • 1622 瀏覽

添加回答

舉報

0/150
提交
取消
微信客服

購課補貼
聯系客服咨詢優惠詳情

幫助反饋 APP下載

慕課網APP
您的移動學習伙伴

公眾號

掃描二維碼
關注慕課網微信公眾號