1

次のコードを使用してオブザーバーを登録するアクティビティがあります

アクティビティ:

//Register for network status updates
NetworkStatus networkStatus = new NetworkStatus(this);
networkStatus.addObserver(new OfflineActivity());
Thread thread = new Thread(networkStatus);
thread.run();

主題:

@Override
public void run() {

    for(;;) {
        Log.d("NetworkStatus", "Checking Network Status");
        if(isConnectedToInternet(context)){
            notifyObservers();
            Log.d("NetworkStatus", "Network Connection is established");
        }
        else {
            Log.d("NetworkStatus", "Not connected to network");
        }
    }   
}

アクティビティをクリックすると、プログラムが応答しなくなります。何かアイデアはありますか?

4

2 に答える 2

3

使用する必要があります.start();

Thread thread = new Thread(networkStatus);
thread.start();

runメソッドを明示的に呼び出すと、実際には新しいスレッドが生成されません。代わりに、メソッド呼び出しはUIスレッドで実行されます。

于 2013-01-31T20:23:36.210 に答える
2

スレッドの実行は無限ループになります。終了できるように、ブレーク条件を追加してください。

于 2013-01-31T20:24:42.623 に答える