1. 程式人生 > >Android開發之不同頁面UI的重新整理

Android開發之不同頁面UI的重新整理

    在公司發開App應用中,Boss要弄類似於微信,QQ的訊息提示紅點功能,這個實現邏輯其實很簡單,就是服務端有新的的資料,就傳來一個訊息,顯示紅點。不過,我們公司的這個App涉及到兩個Activity的互動,所以資料重新整理和UI重新整理就涉及到不同的Activity之間的資料交換,對於我這個小白來說還是有點難度的。

    先說一下主要的實現思路:

    1.剛開始我想到的是在 不同的Activity進行資料交換,並且由一個頁面去重新整理另外一個頁面,我可以用Broadcast,就是現在獲取資料的主頁面新開啟一個執行緒,獲取到服務端的資料後,通過傳送廣播,把訊息傳出去,而另外一個頁面也新建一個BroadcastReceiver來接收來自於主頁面的訊息,進而更新自己的頁面。

    主要程式碼如下:

    private void checkNewData(){
    	new Thread(){
    		public void run(){
    			if (true) {
    		Intent intent = new Intent();
                intent.setAction("check"); 
                sendBroadcast(intent);
    }
    
    BroadcastReceiver receiver = new BroadcastReceiver() {
		
		@Override
		public void onReceive(Context context, Intent intent) {
			if (intent.getAction().equals("yes")) {   //接收廣播
				
			}
		}
	};
    後來發現這種不行,因為onReceive執行的時間很短,而thread裡面的操作又是耗時的操作,所以很多時候是onReceive方法執行完了,thread裡面的操作都還沒返回值,所以,這個方法不可取。

    2.第二種方法,通過Service

    通過service是可以實現的,由於本人對service不太熟悉,所以沒有采用這種方法,還有就是本人覺得沒必要啟動一個service,至於具體怎麼做,同學們還是自己去學習service的使用吧。

    3.現在主要講解我使用實現的方法,共享handle

    在Android新建目錄的AndroidManifest.xml檔案中,有一個application屬性,所有的Activity什麼的都包含在裡面,所以如果是繼承這個檔案的類,裡面的屬性和方法是可以共享的。我就是通過共享handle來實現這個功能的,具體實現如下:

   紅點的顯示,我是在一個頁面裡實現的,就是通過Thread-handle機制實現的,這裡就不多說了,主要說怎麼在一個activity裡重新整理另一個activity

  首先在你要顯示紅點,就是你要重新整理UI的介面的Activity建立一個handle

private MyHandler myHandler;
private AppContext myContext;   //全域性的一個class

myHandler = new MyHandler();
myContext = (AppContext) getApplication();
myContext.setMyHandler(myHandler);

class MyHandler extends Handler{

@Override
public void handleMessage(Message msg) {
			if (msg.what == 1) {
				//重新整理UI操作
			}
		}
    	
    }
AppContext
private MyHandler myHandler;
	
	
	
	public MyHandler getMyHandler() {
		return myHandler;
	}

	public void setMyHandler(MyHandler myHandler) {
		this.myHandler = myHandler;

mainActivity
        myContext = (AppContext) getApplication();  
        // 獲得該共享變數例項  
        mHandler = myContext.getHandler();  
          
       mHandler.sendEmptyMessage(1);  
    至此,完成UI的重新整理