2011-04-20 175 views
0

我有一个应用程序需要更新一个持续事件通知。通知有一个进度条,我需要每5分钟增加一次。我使用处理程序,但有些事情困扰我,或者我根本不明白它们是如何工作的。Android处理程序问题

 if (progress<=24) 
      { 

    contentView.setProgressBar(R.id.status_progress,24,progress,false); 
    Toast.makeText(getApplicationContext(),progress, Toast.LENGTH_SHORT).show(); 
    progress++; 
    mnNotificationManager.notify(IS_PARKED_ID, notification); 
    mHandler.postDelayed(mUpdateTimeTaskProgressbar, 300000); 

      } 

这里是代码。看起来,当设备屏幕关闭时,通知没有被更新。我过去曾经使用过处理程序,但据我记得,我每隔100毫秒就更新一次。所以我的问题是,处理程序是以何种方式暂停,停止并重新启动,还是别的。你有没有像wake_lock的建议。 在此先感谢,西蒙
编辑: 忘记提到这是所有从服务

回答

1

运行不时的GC运行以释放内存,您的设备上。如果从UI线程运行,您的通知的更新程序也可能会收集。

我使用service来显示正在进行的通知,这种方式我可以肯定,服务和通知都不会停止/收集。

我的活动和服务之间的沟通是我用处理程序解决的,但也有很多技巧。

+0

它从服务运行,忘记提及。事情是,这一直发生,而不是一段时间。在这两天我一直在测试这个,情况就是这样。我正在考虑用计时器来解决这个问题。 – Simon 2011-04-20 13:34:12

+0

如果5分钟是固定费率计划,那么您可以使用计时器,并且在tas的运行方法内,您可以收集必要的数据以进行更新。之后,您可以调用您的处理程序来更新进度条。 – rekaszeru 2011-04-20 13:37:39

+0

它是固定的,所以我想我会使用计时器。感谢您的帮助 – Simon 2011-04-20 20:58:53

0

默认情况下,处理程序在UI线程的相同进程中运行,所以我认为您最好使用服务来更新进度栏。 在这种情况下,您想每5分钟更新UI。您可以使用AlarmManager启动警报服务来实现此目的。

+0

它从一个服务运行,但您不认为使用AlarmManager过度使用它,因为我必须处理广播。 – Simon 2011-04-20 13:32:17