-1

ばかげた/奇妙な質問があるかもしれません

私はAndroidとJavaが初めてで、Androidのメソッドとそれらの使用方法を理解するためのアドバイスが必要です

私はこのようなメインアクティビティクラスを持っています

extends  Activity implements OnClickListener{

     private static final String TAG = "ServicesDemo";
     public String myimageURL;
     private EditText Lyrics;
    private ImageView AlbumPic;
    private Button play,  stop;
    private TextView Artist, Song, Album, News, Lyric;
    private UpdateTimeTask m_updateTime;
    private Handler m_handler;
    Parser data;
    /** The delay in milliseconds between updates. */
    private final int DELAY = 20000;

    /** Called when the activity is first created. */
    @Override
    public void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.main);

        Artist =(TextView)findViewById(R.id.tvArtist);
        Song  =(TextView)findViewById(R.id.tvSongTitle);
        Album =(TextView)findViewById(R.id.tvAlbum);
        play = (Button) findViewById(R.id.play);
        stop = (Button) findViewById(R.id.stop);
        Lyrics = (EditText) findViewById(R.id.tvLyrics);
        News = (TextView)findViewById(R.id.tvAnouncement);
        AlbumPic = (ImageView) findViewById(R.id.AlbumPic);



        play.setOnClickListener(this);
        stop.setOnClickListener(this);



        m_updateTime = new UpdateTimeTask();

        m_handler = new Handler();
        m_handler.post(m_updateTime);
    }

    private class UpdateTimeTask implements Runnable {
        public void run() {


            try {

                SAXParserFactory saxPF = SAXParserFactory.newInstance();
                SAXParser saxP = saxPF.newSAXParser();
                XMLReader xmlR = saxP.getXMLReader();


                URL url = new URL("http://www.mysite.com/AndroidTest.php"); 
                XMLHandler myXMLHandler = new XMLHandler();
                xmlR.setContentHandler(myXMLHandler);
                xmlR.parse(new InputSource(url.openStream()));

            } catch (Exception e) {
                System.out.println(e);
            }
            data = XMLHandler.data;



            for (int i = 0; i < data.getTitle().size(); i++) {

           Lyrics.setText(data.getLyric().get(i));
                 myimageURL = data.getPic().get(i);

            Song.setText("Title = "+data.getTitle().get(i));


            Artist.setText("Artist = "+data.getArtist().get(i));


            Album.setText("Album = "+data.getAlbum().get(i)); 






 }

 downloadFile(myimageURL );

}

Bitmap bmImg;
void downloadFile(String fileUrl) {
 URL myFileUrl = null;
 try {
    myFileUrl = new URL(fileUrl);
 } catch (MalformedURLException e) {
    // TODO Auto-generated catch block
    e.printStackTrace();
 }
 try {
    HttpURLConnection conn = (HttpURLConnection) myFileUrl
          .openConnection();
    conn.setDoInput(true);
    conn.connect();
    InputStream is = conn.getInputStream();

    bmImg = BitmapFactory.decodeStream(is);
    AlbumPic.setImageBitmap(bmImg);
 } catch (IOException e) {
    // TODO Auto-generated catch block
    e.printStackTrace();
 }
 m_handler.postDelayed(m_updateTime, DELAY);
 AlbumPic.clearAnimation();
}

}

コードは正常に動作します

ご覧のとおり、タイマーとサービスを使用しています

サービスコードは「my_service」という別のクラスに書かれていますタイマーコードはメインクラスに書かれています

私の質問は、「タイマークラス」などの別のクラスのメインクラスにあるタイマーコードを配置する必要があることです

そして、サービスの場合と同じように、メインクラスから呼び出します

それとも今のままでいいの?

XMLはインターネットサーバー上にあるため、asynctaskを使用する必要がありますか?

asynctask は 1 回しか実行されないことを正しく理解していたので、asynctask を使用する場合は、UI を最新の状態に保つためにタイマーと組み合わせて使用​​する必要があります

ありがとう

ps は「クラス」と同じ「スレッド」です

4

1 に答える 1

0

主要なリファクタリングが必要な場合を除いて、タイマーコードはそのままにしておきます。

これは、UpdateTimeTaskでメインアクティビティの多数のプライベートメンバーにアクセスするためです。これを別のファイルに分割すると、現在の状態でこれらのメンバーにアクセスできなくなります。

リファクタリングが必要な場合は、AsyncTaskを機能させることができる場合があります。これらは、(ポーリングのようなものではなく)単一のタスクを実行する場合に使用されます。AsyncTaskが問題の原因であることがわかった場合は、ハンドラーを使用してUIと通信します。

最後に、スレッドはJavaのクラスと同じではありません。クラスは特定のオブジェクトの一連の特性とコマンドを表し、スレッド実行パスを表します。クラスオブジェクトはアクションを実行するために使用されるものですが、スレッドはアクションの特定のコレクションです。

于 2012-07-27T15:59:50.237 に答える