如何在每次启动应用程序时为新数据刷新应用程序?

时间:2012-12-06 19:19:14

标签: java android

我很难理解Android应用每次启动应用时如何获取数据或刷新数据。

我有数据,它每分钟更新一次意味着它已被更改,但我不会在每次启动应用程序时都看到它更新,只是随机更新数据。

我累了,仍然无法工作。

OnResume();

这是我的代码。

package com.zv.android;

import java.io.BufferedReader;
import java.io.IOException;
import java.io.InputStreamReader;
import java.net.MalformedURLException;
import java.net.URL;

import android.app.Activity;
import android.os.Bundle;
import android.widget.TextView;

public class ZipActivity extends Activity {

    TextView textMsg, textPrompt;
    final String textSource = "https://docs.google.com/spreadsheet/pub?key=0AqSBI1OogE84dDJyN0tyNHJENkNyYUgyczVLX0RMY3c&single=true&gid=0&range=a2%3Aa26&output=txt";

    /** Called when the activity is first created. */
    @Override
    public void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.main);
        textPrompt = (TextView)findViewById(R.id.textprompt);
        textMsg = (TextView)findViewById(R.id.textmsg);

        textPrompt.setText("Wait...");

        URL CPE;
        try {
            CPE = new URL(textSource);
            BufferedReader bufferReader = new BufferedReader(new InputStreamReader(CPE.openStream()));
            String StringBuffer;
            String stringText = "";
            while ((StringBuffer = bufferReader.readLine()) != null) {
                stringText += StringBuffer + "\n"; ;
            }
            bufferReader.close();
            textMsg.setText(stringText);
        } catch (MalformedURLException e) {
            // TODO Auto-generated catch block
            e.printStackTrace();
            textMsg.setText(e.toString());
        } catch (IOException e) {
            // TODO Auto-generated catch block
            e.printStackTrace();
            textMsg.setText(e.toString());
        }
        textPrompt.setText("Finished!");        
    }

}

3 个答案:

答案 0 :(得分:1)

您可以在应用程序中覆盖Application类。在清单文件中定义它。每次你的应用程序启动时 - 无论它如何启动,用户点击,广播意图,服务 - 你的应用程序类将获得创建。

我认为您需要了解应用程序的生命周期。 Android上的应用程序不会因为你关闭而死掉。如果您希望每次预防时都更新它,则必须覆盖活动中的onstart()方法。

答案 1 :(得分:1)

每次启动活动时都会执行onCreate方法,这意味着该方法中的所有代码都将再次执行。如果您要获取的内容未更新,则可能是因为未从源更新。但是再次刷新只会在你开始活动时发生。

你可以查看这个可能对你有帮助的答案: https://stackoverflow.com/a/11456974/1552551

答案 2 :(得分:1)

Activity是Android应用程序的构建块(更好的是, ,因为现在Fragment API代表基本组件)。它有所谓的lifecycle events你可以挂钩。你命名为:

  • onCreate(),在首次创建活动时由框架调用。可能这个活动对象可以永远,即使其他应用程序占据前景,两周后用户在启动器中触摸应用程序的图标:它可能仍然是同一个Activity对象。实际上,Activites并没有那么久,但是你明白了

  • onResume(),在onPause()后调用,当Activity失去前景时调用它(请注意,这与活动的内容可见性无关)。因为onResume()总是在onPause()之后调用,所以保证每次用户执行其他操作时都会调用它,然后切换到您的活动,这似乎只是您的用例。

注意区别:用户安装你的应用程序,触摸启动器中的图标,这会触发一个意图,系统检测到没有活动,创建一个新实例。然后调用 onResume(),最后将活动带到前台。接下来,您收到短信通知,切换到消息,然后返回旧活动,再次调用onResume()(但不是onCreate)。

因此,如果您想使用生命周期钩子来刷新Activity的内容,onResume()就是您要找的。但请注意,一旦读取了URL内容,内容可能会更改,如果活动仍在前台,则不会通知客户端。因此,您可能希望使用某种服务器事件(推送),如C2DM(或websocket,或普通套接字,或者您认为合适的任何内容)。