如何让奴隶通知主人?

问题描述:

我想通知UI线程有关从属线程发生更改事件,以便UI线程可以更新视图。对于一个执行确实干得不错,如:如何让奴隶通知主人?

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线程无限循环,等待从机的通知,该方案没有奏效:

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

我试着首先要改变从奴隶线程的视图,并发现这是禁止在Android中,所以我试图然后使用处理程序线程,但事情并没有顺利,因为我的预期。

我没有看到用线程完成此任务的简单方法,您可以尝试使用IntentServices和第三方库(如EventBus)在完成后与您的活动进行通信。

检查http://greenrobot.org/eventbus/documentation/how-to-get-started/

如果你真的想这样做,在主界面,你可以使用的AsyncTask代替。 选择此表可以在Android中使用并发功能https://i.stack.imgur.com/N1DNU.png