我正在编写我的第一个 Android 应用程序(到目前为止很有趣!)并且遇到了障碍。我正在使用面向 Android 4.2 的 SDK 工具 21.1。
我正在尝试建立一个系统,允许活动注册以在设定的时间间隔调用方法。我想以这样一种方式执行此操作,即请求的处理将在其自己的进程中处理,以避免使 UI 无响应。
我一直在阅读并探索了一些途径。首先,我认为服务将是解决此问题的好方法,但发现相当多的信息表明这不是一个好的行动方案,因为操作系统能够不加选择地终止服务。
我现在正在考虑使用 ScheduledThreadPoolExecutor。我用一个可覆盖的方法创建了这个简单的类来传递方法:
public abstract class BaseEvent implements EventListener {
public abstract void onFire(Object... params);
}
我创建了这个可运行的任务调用该方法:
public class HeartBeatTask implements Runnable {
private BaseEvent mCallback;
private Object mParams;
public HeartBeatTask(BaseAioEvent callback,Object... params){
mParams = params;
mCallback = callback;
}
@Override
public void run() {
Log.d(LOG_TAG,"Run called");
if(mCallback != null)
{
mCallback.onEvent(mParams);
}
}
}
我将像这样使用它(在活动中)
ScheduledThreadPoolExecutor threadPool = new ScheduledThreadPoolExecutor(1);
BaseEvent callback = new BaseEvent() {
public void onFire(Object... params){
if(params[0] !=null)
{
Context context = (Context)params[0];
Toast toast = Toast.makeText(context, "Task ran", Toast.LENGTH_SHORT);
toast.show();
}
}
};
threadPool.scheduleAtFixedRate(new HeartBeatTask(callback,(this)),0, 5, TimeUnit.SECONDS);
这将每 5 秒执行一次任务,尽管回调方法只运行一次。
我在想这可能不是做事的好方法。我的感觉是我把事情复杂化了。我真正需要的是能够在主线程以外的进程上执行方法的能力,并且在设定的时间间隔内,活动可以绑定多个操作。因此,例如,我可能希望在调用数据库后更新 UI 组件,并且希望每分钟都更新一次。
有人能告诉我我是否走在正确的轨道上吗?我正在尝试做的事情是实现我的目标的可行方法吗?我可以采取更好的方法吗?任何意见或建议将不胜感激。谢谢!