我很难理解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!");
}
}
答案 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,或普通套接字,或者您认为合适的任何内容)。