[英]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的設計指南和他們自己的應用的解釋),而贊成綁定到特定View
的Snackbar的原因之一。
我看不到使用activity context
而不是application context
來創建Toast
。
反之亦然,當讓您的Singleton
持有對activity context
s的引用時,您可能會很容易通過堅持已經被銷毀的Activity
來造成內存泄漏。 您可以只將Activity
作為方法參數傳入,但這可能不那么方便(例如,從Activity
以外的類中調用該方法)。
長話短說:我建議讓您的SingleWorker
引用application context
來創建Toast
。
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.