comment utiliser praticable dans android

Salut, je suis débutant en Java, développement Android, et je veux savoir comment utiliser Runnable dans Android. Il ne semble pas fonctionner pour moi. Voici mon code source:

MainTest.java

package com.heeere.androiddnssd.discovery;

import android.annotation.SuppressLint;
import android.app.Activity;
import android.os.Bundle;
import android.widget.TextView;

public class MainTest extends Activity {

    android.net.wifi.WifiManager.MulticastLock lock;
    private Discovery discovery = new Discovery(this); 
    private TextView textView;

    /** Called when the activity is first created. */
    @SuppressLint("NewApi") @Override
    public void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.main);
        textView = (TextView)this.findViewById(R.id.text);

        android.net.wifi.WifiManager wifi = (android.net.wifi.WifiManager) getSystemService(android.content.Context.WIFI_SERVICE);
        lock = wifi.createMulticastLock("mylockthereturn");
        lock.setReferenceCounted(true);
        lock.acquire();

    }

    public void updateView () {
        String msg = discovery.getMsg();
        textView.setText(msg);
    }

    @SuppressLint("NewApi") @Override
    protected void onStop() {
        discovery.stop();
        lock.release();
        super.onStop();
    }


}

Discovery.java

package com.heeere.androiddnssd.discovery;
import java.io.IOException;
import javax.jmdns.JmDNS;
import javax.jmdns.ServiceEvent;
import javax.jmdns.ServiceListener;
public class Discovery {
private String type = "_ikunet._tcp.local.";
private String msg="";
private JmDNS jmdns = null;
private ServiceListener listener = null;
private MainTest maintest;
android.os.Handler handler = new android.os.Handler();
public Discovery (MainTest maintest) {
this.maintest = maintest;
setUp();
}
private void setUp() {
try {
jmdns = JmDNS.create();
jmdns.addServiceListener(type, listener = new ServiceListener() {
public void serviceResolved(ServiceEvent ev) {
msg = msg + ev.getInfo().getName()+ "\n";
update();
}
public void serviceRemoved(ServiceEvent ev) {
}
public void serviceAdded(ServiceEvent event) {
jmdns.requestServiceInfo(event.getType(), event.getName(), 1);
}
});
} catch (IOException e) {
e.printStackTrace();
return;
}
}
public String getMsg() {
return msg;
}
private void update() {
handler.postDelayed(new Runnable() {
public void run() {
maintest.updateView();
}
}, 1);
}
public void stop() {
if (jmdns != null) {
if (listener != null) {
jmdns.removeServiceListener(type, listener);
listener = null;
}
jmdns.unregisterAllServices();
try {
jmdns.close();
} catch (IOException e) {
//TODO Auto-generated catch block
e.printStackTrace();
}
jmdns = null;
}
}
}

main.xml

<?xml version="1.0" encoding="utf-8"?>
<ScrollView xmlns:android="http://schemas.android.com/apk/res/android"
android:id="@+id/scroller"
android:layout_width="fill_parent"
android:layout_height="fill_parent"
android:fillViewport="true">
<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
android:layout_width="fill_parent" 
android:layout_height="fill_parent" 
android:orientation="vertical"
android:scrollbars="vertical"
android:fadeScrollbars="true"
android:isScrollContainer="true">
<TextView  
android:layout_width="fill_parent" 
android:layout_height="wrap_content" 
android:text="Hello World, Android Discovery" />
<TextView 
android:id="@+id/text"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:text="Hello, I am a TextView" />
<Button 
android:id="@+id/button"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:text="Hello, I am a Button" />
</LinearLayout>
</ScrollView>

La serviceResolved est exécuté à partir de la Discovery classe un certain temps après le démarrage de l'application et doit mettre à jour le textview (à partir de MainTest classe). Mais cela n'arrive pas. Comment puis-je corriger ce comportement? Je pense qu'il pourrait être un Runnable problème.

Voulez-vous exécuter ur "serviceResolved" comme fond d'opération?
Juste écho à ce que les Annonces dit, il semble que vous faites tous les travaux sur le thread de l'INTERFACE utilisateur déjà, donc pas besoin de publier sur le thread de l'INTERFACE utilisateur. Cependant, il semble que vous l'intention de faire d'arrière-plan/multithread travail
le serviceResolved est automatiquement exécuté comme arrière-plan par Jmdns paquet

OriginalL'auteur MOHAMED | 2012-09-11