0

我很难理解每次启动应用程序时 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!");        
    }

}
4

3 回答 3

1

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

您可以查看此答案,它可能会对您有所帮助: https ://stackoverflow.com/a/11456974/1552551

于 2012-12-06T19:33:34.823 回答
1

您可以在应用程序中覆盖 Application 类。在清单文件中定义它。每次你的应用程序启动时——无论它如何启动、用户点击、广播意图、服务——你的应用程序类都会得到一个 on create。

我认为您需要了解应用程序的生命周期。android 上的应用程序不会因为你关闭它们而死掉。如果您希望它在每次被置于前台时更新,您将不得不在您的活动中覆盖 onstart() 方法。

于 2012-12-06T19:23:17.733 回答
1

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

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

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

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

因此,如果您想使用生命周期挂钩来刷新 Activity 的内容,onResume()这就是您要找的。但是请注意,一旦读取 URL 内容,内容可能会发生变化,并且如果活动仍在前台,则不会通知客户端。因此,您可能想要使用某种服务器事件(推送),例如C2DM(或 websocket,或普通套接字,或任何您喜欢的东西)。

于 2012-12-06T19:34:29.170 回答