temporizador saxparser y asynctask

tal vez tengo una pregunta estúpida/extraña

Soy nuevo en Android y Java y necesito algunos consejos para comprender los métodos de Android y cómo usarlos.

tengo una clase de actividad principal que se ve así

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();
}

}

el código funciona bien

como puede ver, uso un temporizador y un servicio

el código de servicio está escrito en una clase diferente llamada "mi_servicio" el código del temporizador está escrito en la clase principal

mi pregunta es ¿debería poner el código del temporizador que tengo ahora en la clase principal en una clase separada, por ejemplo, "clase de temporizador"?

y luego llamarlo desde la clase principal tal como lo hice para el servicio

o esta bien como esta ahora

y debido a que el xml está en un servidor de Internet, ¿debería usar asynctask?

¿Entendí bien que la tarea asincrónica solo se ejecuta una vez? Entonces, si uso una tarea asincrónica, tengo que usarla en combinación con un temporizador para mantener la interfaz de usuario actualizada.

gracias

ps es un "hilo" lo mismo que una "clase"

preguntado el 27 de julio de 12 a las 16:07

1 Respuestas

Dejaría el código del temporizador allí, a menos que quisiera una refactorización importante.

La razón de esto es que accede a una cantidad de miembros privados de su actividad principal en UpdateTimeTask. Divida esto en un archivo separado y ya no tendrá acceso a estos miembros en su estado actual.

Si está preparado para una refactorización, es posible que pueda hacer que AsyncTask funcione. Se utilizan cuando desea realizar una sola tarea (en lugar de algo como sondeo), que está haciendo. Si encuentra que AsyncTask está causando problemas, entonces use un entrenador de animales para comunicarse con la interfaz de usuario.

Finalmente, los hilos no son lo mismo que las clases en Java. UN clase representa un conjunto de características y comandos para un objeto en particular, mientras que un hilo representa un camino de ejecución. Los objetos de clase son las cosas que se usan para realizar acciones, mientras que los hilos son ciertas colecciones de acciones.

Respondido 27 Jul 12, 16:07

No es la respuesta que estás buscando? Examinar otras preguntas etiquetadas or haz tu propia pregunta.