簡體   English   中英

單身人士班,有效利用資源在不同活動中敬酒

[英]Singleton class that show a toast in different activities using resources efficiently

我有一個單例類(我們稱其為: SingleWorker ), 該類在多個活動中使用。 根據情況,如果正在執行任務,它會顯示祝酒詞或進度對話框。 我有兩種方法可以做到這一點:

1)在單例中創建一個單獨的方法-SingleWorker,該方法將在顯示吐司/進度之前獲取活動的上下文

2)在擴展的應用程序單例中,每次我輸入一個新活動(及其onResume上)它的實例時,我都會存儲該實例,然后在SingleWorker單例中使用它。

哪個是更好的選擇(我想是第一個),我可以做得更好嗎? 我試圖自己找到一個有效的答案,但是我需要一個方向或技巧。 任何想法,建議,建議或鏈接都​​將受到感激。 謝謝閱讀 !

我長時間使用第二種方法,並在遇到一些問題后決定改用第一種方法。 當您需要將上下文存儲在上下文之外時,最好將其存儲在BaseActivity中(例如,后台線程)。要顯示吐司或對話框,只需將其傳遞給單例類中的方法(方法1),您將沒有內存。泄漏並且不必擔心在onResume()和onDestroy()方法中為contextStored提供新值。

這是顯示對話框的方法的示例:

 public static void showAcceptDialog(String message, final Context contex, View.OnClickListener onClickYes, View.OnClickListener onClickNo) {
    dialog = new Dialog(contex);
    dialog.requestWindowFeature(Window.FEATURE_NO_TITLE);
    dialog.getWindow().setBackgroundDrawable(new ColorDrawable(Color.TRANSPARENT));
    dialog.setContentView(R.layout.layout_of_your_dialog);
    TextView tv = (TextView) dialog.findViewById(R.id.generic_accept_message);
    //Seta o titulo do dialogo
    tv.setText(message);
    Button btNo = (Button) dialog.findViewById(R.id.generic_dialog_no);
    if (onClickNo != null) {
        btNo.setOnClickListener(onClickNo);
    } else{
        btNo.setOnClickListener(new View.OnClickListener() {
            @Override
            public void onClick(View v) {
                dialog.dismiss();
            }
        });
    }

    Button btYes = (Button) dialog.findViewById(R.id.generic_dialog_yes);
    if(onClickYes != null){
        // dialog.dismiss();
        btYes.setOnClickListener(onClickYes);
    }
    else {
        btYes.setOnClickListener(new View.OnClickListener() {
            @Override
            public void onClick(View v) {
                dialog.dismiss();
            }
        });
    }
    dialog.show();
}

Toast就可見性而言,不限於特定的Activity 這就是為什么他們偏'“棄用”(不是正式的,這只是我對Google的設計指南和他們自己的應用的解釋),而贊成綁定到特定ViewSnackbar的原因之一。

我看不到使用activity context而不是application context來創建Toast

反之亦然,當讓您的Singleton持有對activity context s的引用時,您可能會很容易通過堅持已經被銷毀的Activity來造成內存泄漏。 您可以只將Activity作為方法參數傳入,但這可能不那么方便(例如,從Activity以外的類中調用該方法)。

長話短說:我建議讓您的SingleWorker引用application context來創建Toast

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM