0

在我的一个应用程序中,我确实在库项目中有一个 FileCache。当库中的 FileCache 缓存了一个新文件时,App 本身有一个 Service 等待通知。

该库是一个 Android 库项目,包含在 App 中。

将通知从库发送到应用服务的最佳方式是什么?

  • 发送广播需要知道服务中的接收者。这在库项目中是不可能的。

  • 从库代码调用服务中的函数也是不可能的。

这是一个代码框架:

// This is in the App
public class MyService extends Service implements OnBufferingUpdateListener, OnCompletionListener, OnErrorListener, OnInfoListener, OnPreparedListener {

    public class MyBroadcastReceiver extends BroadcastReceiver {

        public static final String BROADCASTRECEIVER = "xx.yyy.zzzzz.MyService.MyBroadcastReceiver";

        @Override
        public void onReceive(final Context context, final Intent intent) {
        }
    }
}

// This is in a library project that's included in the App
public class FileCache {

    private void doThread() {
        final Handler handler = new Handler() {

            @Override
            public void handleMessage(final Message message) {

                try {
                    if (processed.size() > 0) {
                        //TODO: Notification to Service
                        processed.clear();
                    }
                } catch (NullPointerException nullPointerException) {
                    //TODO:
                }

                if (queue.size() > 0) {
                    doThread();
                } else {
                    running = false;
                }
            }
        };

        new Thread() {

            @Override
            public void run() {
                for (Map.Entry<String, QueueElement> entry : queue.entrySet()) {
                    QueueElement element = entry.getValue();
                    if (element != null) {
                        File file = fetch(element.url);
                        if (file != null) {
                            ProcessedElement processedElement = new ProcessedElement();
                            processedElement.file = file; 
                            processedElement.url = element.url; 
                            processed.put(entry.getKey(), processedElement);
                        }
                    }

                    deleteFromQueue(entry.getKey());
                }

                handler.sendEmptyMessage(0);
            }
        }.start();
    }
}
4

1 回答 1

0

发送广播需要知道服务中的接收者。这在库项目中是不可能的。

是的。让您的图书馆项目的客户通过某种方法的参数向图书馆提供足够的信息:

  • 识别服务(例如,服务Class对象),在这种情况下,您可以startService()向服务发送命令,或者

  • 识别BroadcastReceiver(例如,其使用的操作字符串IntentFilter),在这种情况下您使用sendBroadcast()

于 2012-06-17T15:24:08.187 回答