android - 启动时停止服务
问题描述
我正在创建一个在启动时通过广播接收器运行服务的 android 应用程序。反过来,该服务运行一个 fileobserver 类来监视一个目录。在受监控的目录中创建文件时,我需要重新启动服务。是否可以在 fileobserver 类事件中重新启动服务?
解决方案
您可以做这样的事情而不必重新启动您的服务(只需在检测到文件更改事件时更新服务状态)。
public class MyService extends Service {
private FileObserver observer;
@Override
public int onStartCommand(final Intent intent, final int flags, final int startId) {
init("path/to/watch");
return super.onStartCommand(intent, flags, startId);
}
@Nullable
@Override
public IBinder onBind(final Intent intent) {
return null;
}
private void init(final String pathToWatch) {
observer = new FileObserver(pathToWatch) {
@Override
public void onEvent(final int event, @Nullable final String path) {
onFileChangeEvent(path);
}
};
observer.startWatching();
}
private void onFileChangeEvent(final String path) {
if(condition) {
observer.stopWatching();
init("new/path/to/watch");
}
}
}
推荐阅读
- google-kubernetes-engine - Kubernetes 集群中的 Cloud SQL 代理:需要哪些服务帐户权限?
- android - Android ListView 滚动时的动画(iOS 风格)
- linq - 如何在通用函数中返回由 linq 创建的新对象
- r - 当唯一行 ID 和列名匹配时,从另一个 data.table 中减去 data.table
- azure - 将 SSIS (.ispac) 打包到 NuGet 源 (Azure Artifacts)
- regex - 如何在 Python 中使用正则表达式仅匹配某个任意字符之前的第一次出现?
- javascript - 在网站上接收并处理 csv 的最简单方法是什么?
- java - 为什么 int p = (p=1) + p; 在字段定义中失败但在方法中可以吗?
- excel - 找到给定日期和日期数组之间最小差异的方程
- crash-dumps - 通过 Squish 运行时缺少应用程序转储文件