我有一个IntentService,它使用TimerTask每隔45秒在OnHandleContent中调用webservice。
我的问题是:我正在调用应用程序启动IntentService,而在OnHandleIntent中,由于TimerTask,任务不断重复。。这样做是一种好做法还是有任何缺点?我应该在我的活动中使用报警管理器每次调用intent service,还是继续使用timer任务在OnHandleIntent中重复任务?
我的代码是这样的:
@Override
protected void onHandleIntent(Intent intent)
{
context=this; //INTENT CONTEXT
final int timerValue = Integer.parseInt(MainActivitySharedPref.GetValue(context, "serviceTimer"));
Log.d(TAG, "DOWNLOADSERVICE called having MainActivity.callService as: " + MainActivity.callService);
t = new Timer();
task = new TimerTask()
{
public void run() {
//run tasks
};
t.scheduleAtFixedRate(task, 0, timerValue); // service executes task every 45 seconds
非常感谢。
在IntentService的OnHandleContent中使用TimerTask是一种好的做法吗?
绝对不是。
IntentService
旨在允许您通过onHandleIntent()
在提供的后台线程中执行工作。它不是为您设计的,用于分叉线程、注册侦听器、设置TimerTask
/ScheduledExecutorService
,或者执行任何将在OnHandleContent()结束后运行的操作。
IntentService
将在onHandleIntent()
结束后自动关闭,在此之后,Android可能会在几秒钟内,在后台线程(或者在本例中,TimerTask
)开始工作之前,终止您的进程。
请使用常规的
服务
。
我应该在我的活动中使用报警管理器每次调用intent service,还是继续使用timer任务在OnHandleIntent中重复任务?
如果你只是在你的某些活动处于前景时才这样做,那么每隔45秒的部分就可以了。如果你试图在电池供电的设备上持续这样做,请准备好因你造成的电池耗电而受到用户的攻击。
但是,当你的一项活动处于前景时
的现代替代品)在常规ScheduledExecutorService
(TimerTask服务中应该可以。您不需要
AlarmManager
,它是专门为在进程终止后让您控制更长的轮询周期而设计的。
我有一个枚举: 在枚举成员之间使用方法检查“层次结构”有什么问题吗?我的意思是-当有人将来可能会意外更改顺序时,使用它排除冗长是否有任何缺点。 还是这样做更好:
我见过很多次scala代码使用Option(对于简单值)或[List[Error],T]来处理错误。 这为这样的代码提供了位置 这会产生一个不太好的代码嵌套,迫使您处理每一步的失败,并迫使您让所有函数返回一个[...] 所以我想知道 > 在scala(或一般的函数式编程)中不鼓励使用异常 使用它们有任何缺点(关于不可变性或代码并发性) 异常与原理或函数式编程有些冲突 你可以想出一个更好的方法来编写
这在本质上不像那样工作吗?使用它甚至是好的实践吗?这让我很不安。
问题内容: 我已经多次听到在HTML 中使用JavaScript事件(例如)是不正确的做法,因为它不利于语义。我想知道不利之处以及如何解决以下代码? 问题答案: 您可能正在谈论简洁的Javascript,看起来像这样: 中央javascript文件中的逻辑如下所示: 优点是 行为(JavaScript)与表示(HTML)分开 没有语言的混合 您正在使用像jQuery这样的javascript框架,
问题内容: 我已经多次听到在HTML 中使用JavaScript事件(例如)是不正确的做法,因为它不利于语义。我想知道不利之处以及如何解决以下代码? 问题答案: 您可能正在谈论简洁的Javascript,看起来像这样: 中央javascript文件中的逻辑如下所示: 优点是 行为(JavaScript)与表示(HTML)分开 没有语言的混合 您正在使用像jQuery这样的javascript框架,
问题内容: 如果使用Sun的专有Java类,则编译器将显示警告。我认为使用这些类通常不是一个好主意。我在某处阅读过。但是,除了警告之外,还有其他根本原因不建议您使用它们? 问题答案: 因为它们是内部API,所以它们可能会以未记录或不受支持的方式进行更改,并且已绑定到特定的JRE / JDK(在您的情况下为Sun),从而限制了程序的可移植性。 尽量避免使用此类API,请始终偏爱公开记录和指定的类。