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
您onDownloaded
PATTERNSActivity onDownloaded
但我只得到:
PATTERNSActivity onDownloaded
这是什么问题?
我知道,如果我创建3个不同的DowmloadManager的每3个对象正在侦听下载状态 - 一切正常。但我想只有一个DownloadManager。有没有可能? – drifter 2012-01-04 19:36:49
@drifter当然;通过将每个监听器保存在列表中来注册。在处理程序中迭代列表,调用每个监听器的'onDownloaded'。请参阅编辑。 – 2012-01-04 19:38:44
所以我需要使用观察者模式和听众列表来解决这个问题。这只是这种目的的方法吗? – drifter 2012-01-04 19:42:18