public interface DownloadListener {
public void onDownloaded();
}
public class DownloadManager {
private static DownloadManager instance;
private DownloadListener mDownloadListener;
public static synchronized DownloadManager getInstance(){
if(instance == null)
instance = new DownloadManager();
return instance;
}
private DownloadManager() {
myHandler.sendEmptyMessageDelayed(29, 3 * 1000);
}
public void registerDownloadListener(DownloadListener downloadListener) {
mDownloadListener = downloadListener;
}
Handler myHandler = new Handler(new Handler.Callback() {
@Override
public boolean handleMessage(Message msg) {
if (msg.what == 29) {
mDownloadListener.onDownloaded();
return true;
}
return false;
}
});
}
public class I implements DownloadListener {
public I() {
DownloadManager.getInstance().registerDownloadListener(this);
}
@Override
public void onDownloaded() {
Log.e("TAG", "I onDownloaded");
}
}
public class You implements DownloadListener {
public You() {
DownloadManager.getInstance().registerDownloadListener(this);
}
@Override
public void onDownloaded() {
Log.e("TAG", "You onDownloaded");
}
}
public class PATTERNSActivity extends Activity implements DownloadListener {
@Override
public void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.main);
new I();
new You();
DownloadManager.getInstance().registerDownloadListener(this);
}
@Override
public void onDownloaded() {
Log.e("TAG","PATTERNSActivity onDownloaded");
}
}
は私が得ることを期待しています:すべてのリスナーが登録されていないのはなぜですか?
は私が
あなたは
をonDownloaded onDownloadedPATTERNSActivity onDownloaded
しかし、私は唯一取得しています:
パターンオンダウンロード
何が問題なのですか?
ダウンロード状態をリスンしている3つのオブジェクトごとに3つの異なるDowmloadManagerを作成すると、すべてわかります。しかし、私はただ一つのDownloadManagerを持っていたい。それは可能かどうか? – drifter
@drifter;各リスナーをリストに保存して登録します。ハンドラでは、リストを反復し、各リスナの 'onDownloaded'を呼び出します。編集を参照してください。 –
この問題を解決するには、リスナーのリストでobserverパターンを使用する必要があります。これはそのような目的のためのアプローチですか? – drifter