在我的一个应用程序中,我确实在库项目中有一个 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();
}
}