我正在编写一个应用程序,其中包含一系列"活动警报"供用户以各种方式进行交互。每个计时器由一个对象表示,该对象包含一个"创建的时间"这表示警报何时出现。我有一个片段向用户显示所有警报,其中每个警报表示为RelativeLayout,其中TextView包含" age"计时器的年龄,通过从当前时间减去的创建时间计算年龄。我的申请要求说明年龄需要每秒计算和更新一次。
这是我的计时器的代码:
final Handler myHandler = new Handler();
final Runnable myRunnable = new Runnable(){
public void run()
{
alarmDuration.setText("Age: " + tempAlarm.getAge());
}
};
try {
//This timer is meant to update the time on each Alarm once a second.
Timer timer = new Timer();
TimerTask timerTask = new TimerTask() {
@Override
public void run() {
myHandler.post(myRunnable);
}
};
//Schedule the timer to go every second.
timer.schedule(timerTask, 0, 1000);
}
catch(Exception e)
{
e.printStackTrace();
}
每个警报视图都有自己的Handler,Runnable和Timer。这就是我的问题所在:当我显示不到10个这样的计时器时,应用程序似乎运行正常,可以毫无问题地管理更新。但是,我尝试在100个警报的范围内加载某个地方,并且应用程序开始丢帧(如我的控制台中所示)。在配置更改(例如旋转屏幕)时,我在50-60的范围内丢帧。
这是更新这些textView的好方法吗?还是有一种方法可以减少对应用程序的拖累?我的一个想法是可能将所有报警年龄视图的ID放入ArrayList,然后只有一个Handler,Runnable和Timer来更新整个列表。
非常感谢任何其他建议!