Android-刷新活动

Android-刷新活动,android,android-activity,refresh,Android,Android Activity,Refresh,我的android应用程序有两个活动: 在第一个MainActivity中,用户选择一些参数,并将这些参数发送到第二个activity Display。 第二个活动调用一个web服务,根据所选参数,web服务返回一个值。我使用返回的值绘制该值演变的条形图。这就是为什么我在第二个活动中创建了一个计时器,我把它放在onCreate函数中: Timer t = new Timer(); t.scheduleAtFixedRate(new TimerTask() { public void r

我的android应用程序有两个活动:

在第一个MainActivity中,用户选择一些参数,并将这些参数发送到第二个activity Display。 第二个活动调用一个web服务,根据所选参数,web服务返回一个值。我使用返回的值绘制该值演变的条形图。这就是为什么我在第二个活动中创建了一个计时器,我把它放在onCreate函数中:

Timer t = new Timer();
t.scheduleAtFixedRate(new TimerTask() { 
    public void run() {
        finish();
        startActivity(getIntent());
    }
},10000, 10000);
因此,每隔10秒,第二个活动将再次调用,条形图将使用新的返回值进行更新

问题是,在第二次或第三次执行计时器后,会同时返回几个相同的值,就好像该活动被多次调用一样。然后应用程序开始冻结,但没有关闭

我正在使用此库提供的图表: 我也尝试过使用上述网站上提供的resetData和appendData函数,以及invalidate函数,但没有任何效果。
你知道为什么会这样吗?我刷新活动的方式是否错误

您描述它的方式:

创建一个新计时器,请参见2。第二个活动的每一次呼叫 每个计时器的目的是调用第二个活动参见1。每10秒 因此,作为时间的函数调用第二个活动的次数呈指数增长

一个可能的解决方案是将计时器移动到主活动的onCreate方法,并且仍然从中调用第二个活动。 这样,任何时候都应该只有一个计时器处于活动状态

编辑: 正如马吕斯所说,一项活动可能不是最佳选择。如果没有用户输入,活动所做的唯一事情就是调用Web服务并返回结果,那么从主活动调用方法就足够了。

首先,调用finish并启动活动,这不是一个好主意

其次,据我所知,在您的场景中,每隔10秒在计时器内调用AsyncTask是一种更好的方法。在doInBackground中调用web服务,然后从onPostExecute更新UI,这样可以避免调用finish并每10秒重新启动一次活动


最后,每次调用活动时,您都要创建一个新的计时器实例,因此需要创建大量的计时器实例来挂起应用程序

为什么不刷新图表而不是活动?我需要再次调用web服务以获取新值,以便更新图表。然后调用web服务,然后更新图表。仍然不明白为什么需要重新启动活动。请参阅了解活动的正确用法。