java - 为什么我的所有听众都没有注册?

标签 java android

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");
    }

}

我期望得到:

I onDownloaded

You onDownloaded

PATTERNSActivity onDownloaded

但我只得到:

PATTERNSActivity onDownloaded

这可能是什么问题?

最佳答案

您将注册的下载器保存在单个实例属性中:

// Last call's downloadListener wins.
public void registerDownloadListener(DownloadListener downloadListener) {
    mDownloadListener = downloadListener;
}

最后注册的是该 Activity 的:

new I();   // First set singleton's property to an instance of I...
new You(); // ...then to an instance of You...
// ...then to the current instance.
DownloadManager.getInstance().registerDownloadListener(this);
<小时/>

根据您的评论进行编辑。

public void registerDownloadListener(DownloadListener downloadListener) {
    mDownloadListeners.add(downloadListener);
}

...

public boolean handleMessage(Message msg) {
    if (msg.what != 29) {
        return false;
    }

    for (DownloadListener listener : mDownloadListeners) {
        listener.onDownloaded();
    }

    return true;
}

关于java - 为什么我的所有听众都没有注册?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/8732759/

相关文章:

java - HashMap 内部的 HashMap

android - C++ NDK 中的 C2DM

android - 如何获取 java 的 containsignorecase ?

IntentService的onHandleIntent方法中的android.os.NetworkOnMainThreadException

android - Android Firebase实现不正确

java - 与主机 server.com/Db_name、端口 1433 的 TCP/IP 连接失败

java - 用于设置/退出全屏的相同 KeyCode - JavaFx

java - 如何跳出 Do While 循环?

java - 如何将字节数组转换为 DSA 私钥?

java - 使用 Stream 展平嵌套 Hashmap