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

アプリケーションのApplicationクラスをオーバーライドできます。これをマニフェストファイルで定義します。アプリが起動するたびに(起動方法、ユーザークリック、ブロードキャストインテント、サービスに関係なく)、アプリケーションクラスは作成時に取得されます。

アプリケーションのライフサイクルを理解する必要があると思います。あなたがそれらを閉じるので、アンドロイド上のアプリケーションは死にません。フォアグラウンドされるたびに更新する場合は、アクティビティのonstart()メソッドをオーバーライドする必要があります。

于 2012-12-06T19:23:17.733 に答える
1

アクティビティを開始するたびに onCreate メソッドが実行されます。これは、そのメソッド内のすべてのコードが再度実行されることを意味します。取得しているコンテンツが更新されていない場合は、ソースから更新されていない可能性があります。ただし、アクティビティを開始したときにのみ更新が行われます。

この回答を確認して ください。

于 2012-12-06T19:33:34.823 に答える
1

アクティビティは、Android アプリケーションの構成要素です (今では Fragment API が基本コンポーネントを表しているため、以前はそうでした) フックできるいわゆるライフサイクルイベントがあります。あなたの名前:

  • onCreate()アクティビティが最初に作成されたときにフレームワークによって呼び出されます。おそらく、このアクティビティ オブジェクトは、他のアプリがフォアグラウンドになり、2 週間後にユーザーがランチャーでアプリのアイコンに触れたとしても、永遠に残る可能性があります。それは、まったく同じ Activity オブジェクトのままである可​​能性があります。実際には、アクティビティはそれほど長く存続しませんが、アイデアは得られます

  • onResume()これは、Activity がフォアグラウンドを失ったときに呼び出さonPause()れます (これは、Activity のコンテンツの可視性とは関係ないことに注意してください)。onResume()は常に の後に呼び出されるためonPause()、ユーザーが何か他のことを行ってからアクティビティに切り替えるたびに呼び出されることが保証されます。これはユースケースのようです。

違いに注意してください。ユーザーがアプリをインストールし、ランチャーのアイコンに触れると、インテントが起動されます。システムは周囲にアクティビティがないことを検出し、新しいインスタンスを作成します。次にonResume()を呼び出し、最後にアクティビティをフォアグラウンドに移動します。次に、SMS 通知を受信し、メッセンジャーに切り替えてから、以前のアクティビティに戻って、onResume()再び呼び出されます (ただし ではありませんonCreate)。

したがって、ライフサイクル フックを使用してアクティビティのコンテンツを更新するonResume()場合は、探しているものです。ただし、URL コンテンツが読み取られると、コンテンツが変更される可能性があり、アクティビティがまだフォアグラウンドにある場合はクライアントに通知されないことに注意してください。したがって、 C2DM (または websocket、プレーン ソケット、または使い慣れたもの) のようなある種のサーバー イベント(プッシュ)を使用することができます。

于 2012-12-06T19:34:29.170 に答える