Android開發之不同頁面UI的重新整理
在公司發開App應用中,Boss要弄類似於微信,QQ的訊息提示紅點功能,這個實現邏輯其實很簡單,就是服務端有新的的資料,就傳來一個訊息,顯示紅點。不過,我們公司的這個App涉及到兩個Activity的互動,所以資料重新整理和UI重新整理就涉及到不同的Activity之間的資料交換,對於我這個小白來說還是有點難度的。
先說一下主要的實現思路:
1.剛開始我想到的是在 不同的Activity進行資料交換,並且由一個頁面去重新整理另外一個頁面,我可以用Broadcast,就是現在獲取資料的主頁面新開啟一個執行緒,獲取到服務端的資料後,通過傳送廣播,把訊息傳出去,而另外一個頁面也新建一個BroadcastReceiver來接收來自於主頁面的訊息,進而更新自己的頁面。
主要程式碼如下:
後來發現這種不行,因為onReceive執行的時間很短,而thread裡面的操作又是耗時的操作,所以很多時候是onReceive方法執行完了,thread裡面的操作都還沒返回值,所以,這個方法不可取。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")) { //接收廣播 } } };
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的重新整理