我的Android应用程序有2个活动:
在第一个(MainActivity)中,用户选择一些参数,并将这些参数发送到第二个活动(显示)。 第二个活动调用Web服务,并根据所选参数,Web服务返回一个值。我使用返回的值绘制该值演变的条形图。这就是我在onCreate()函数中放入的第二个活动中创建一个计时器的原因:
Timer t = new Timer();
t.scheduleAtFixedRate(new TimerTask() {
public void run() {
finish();
startActivity(getIntent());
}
},10000, 10000);
因此,每隔10秒钟,第二个活动再次被调用,条形图将使用新返回的值进行更新。
问题是,在计时器的第二次或第三次执行之后,同时返回几个相同的值,就像多次调用该活动一样。然后应用程序开始冻结(但不会关闭)。
我正在使用此库提供的图表:http://android-graphview.org/
我也尝试使用上面网站上提供的函数(resetData和appendData),以及invalidate()函数,但没有任何作用。
为什么会这样?我刷新活动的方式错了吗?
答案 0 :(得分:0)
你描述它的方式:
因此,第二个活动作为时间函数被调用的次数呈指数增长。
一种可能的解决方案是将计时器移动到主活动的onCreate方法(并仍然从中调用第二个活动)。 这样,任何时候都应该只有一个Timer处于活动状态。
编辑: 正如Marius评论的那样,活动可能不是最佳选择。如果没有用户输入,并且活动所做的唯一事情是调用webservice并返回结果,那么从Main Activity调用的方法就足够了。
答案 1 :(得分:0)
首先,致电finish()
并开始活动,不是一个好主意。
其次,据我了解您的情况,每隔10秒钟在AsyncTask
内调用Timer
是实现此目的的更好方法。通过doInBackground()
调用您的网络服务,然后从onPostExecute()
更新您的用户界面,这样您就可以避免拨打finish()
并每隔10秒重新启动您的活动。
最后,您正在创建一个新的Timer
实例eveytime,您的Activity将被调用,因此会创建大量Timer
个实例来挂起您的应用程序。