2017-03-06 18 views
0

UIスレッドがビューを更新できるように、スレーブスレッドからの変更イベントについてUIスレッドに通知したいと思います。私が試したスレーブ通知マスターにする方法?

//UI Thread 
    while(true){ 
      synchronized(mutex) 
      { 
       try { 
        mutex.wait();      
        if(!flag){ 
         adapter = new PlayListAdapter(this, R.layout.activity_row_item, data);    
         listView = (ListView)findViewById(R.id.playlist_listView);   
         listView.setAdapter(adapter); 
         flag=true; 
        } else { 
         adapter.clear(); 
         adapter.addAll(data); 
         adapter.notifyDataSetChanged(); 
        } 
       } catch (InterruptedException e) { 
        e.printStackTrace(); 
       } 
      } 
    }  

public Class MainActivity extends Activity{ 

private final Object mutex = new Object(); 
private String[] data; 
private boolean flag = false; 


      //UI Thread 
      synchronized(mutex) 
      { 
       try { 
        mutex.wait();      
        if(!flag){ 
         adapter = new PlayListAdapter(this, R.layout.activity_row_item, data);    
         listView = (ListView)findViewById(R.id.playlist_listView);   
         listView.setAdapter(adapter); 
         flag=true; 
        } else { 
         adapter.clear(); 
         adapter.addAll(data); 
         adapter.notifyDataSetChanged(); 
        } 
       } catch (InterruptedException e) { 
        e.printStackTrace(); 
       } 
      }  

      //Slave thread 
      While(true){ 
       //Waiting for an event to occur in order to update data 
       //change data 
       synchronized(mutex){ 
         mutex.notify(); 
       } 
      } 
    } 

しかし、その後、私は無限にUIスレッドループを作り、スレーブの通知を待つしようとしたとき、プログラムは動作しませんでした:まあのような一回の実行のために物事を行ってきました最初はスレーブスレッドからビューを変更し、これがアンドロイドで禁止されていることを発見したので、ハンドラスレッドを使用しようとしましたが、期待通りにうまくいきませんでした。

答えて

0

私はスレッドでこれを行う簡単な方法は見当たりません。IntentServicesとEventBusのようなサードパーティのライブラリを使って試してみましょう。

チェックhttp://greenrobot.org/eventbus/documentation/how-to-get-started/

あなたが本当にあなたの代わりにAsyncTaskを使用することができ、メインUIでそれをしたい場合。 Androidで並行処理を行うには、この表を確認してくださいhttps://i.stack.imgur.com/N1DNU.png

関連する問題