Android新浪微博client(一)——主架構搭建

來源:互聯網
上載者:User

標籤:imp   chart   ott   接收   turn   sys   架構   啟動   case   

原文出自:方傑| http://fangjie.sinaapp.com/?p=62 轉載請註明出處

該項目代碼已經放到github:https://github.com/JayFang1993/SinaWeibo

提前聲明的是,我是依照Ivan的這套教程學下來的。

首先,對於不論什麼應用我們都須要建立一套訊息處理機制,就是當使用者在UI介面上點擊了什麼。你應該做出什麼樣的處理,處理完畢之後又要將結果 反饋給使用者。顯示在UI介面上。簡而言之:主架構在這裡主要是搭建起一個非同步訊息處理機制,UI線程中發送訊息,service處理訊息。處理完了調用UI線程執行個體更新UI介面。

先看看這裡是怎麼處理的,例如以:


解析:在程式啟動時開啟MainService。MainService中新開個線程來不斷迴圈的監聽Tasks中是否有任務。

當UI介面的主線程接收到使用者的某個操作時。就會調用MainService.newTask()將這個任務放進Tasks中。而且把Activity放進Activities。

這樣在MainService中的第二線程就會監聽到這個任務,就會調用MainService.doTask(),當做完處理後MainService第二線程就會向MainService主線程發送Handler訊息,將處理得一些資料發送到Acitivity中,然後調用的Activity.refresh()就能重新整理頁面了。這裡要強調的是UI層的Activity都要實現IWeiboActivity這樣一個介面。實現他的refresh(),init()兩個抽象方法。

MainService.java

package com.fangjie.weibo.logic;import java.util.ArrayList;import java.util.LinkedList;import java.util.List;import java.util.Queue;import android.app.Activity;import android.app.Service;import android.content.Intent;import android.os.Handler;import android.os.IBinder;import android.os.Message;import android.util.Log;import com.fangjie.weibo.bean.*;import com.fangjie.weibo.db.DBUserInfo;import com.fangjie.weibo.ui.IWeiboAcitivity;import com.fangjie.weibo.util.GetUserInfo;import com.weibo.sdk.android.Oauth2AccessToken;public class MainService extends Service implements Runnable{private static Queue<Task> tasks=new LinkedList<Task>();private static ArrayList<Activity> appActivities=new ArrayList<Activity>();private boolean isRun;private Handler handler;@Overridepublic void onCreate() {// TODO Auto-generated method stub/*** 在MainService中開啟第二線程來處理任務* 主要是不斷監聽Tasks堆棧,從Tasks中處理task*/isRun=true;Thread thread =new Thread(this);thread.start();super.onCreate();/*** 主要是擷取從MainService第二線程(doTask)中擷取處理完任務的資料* 並通知更新UI介面*/handler =new Handler(){public void handleMessage(Message msg){IWeiboAcitivity activity=null;switch(msg.what){case Task.WEIBO_LOGIN:activity=(IWeiboAcitivity)getActivityByName("LoginActivity");activity.refresh(Task.WEIBO_LOGIN,msg.obj);break;case Task.GET_USERINFO_BY_TOKEN:break;case Task.GET_USERINFO_IN_LOGIN:break;default:break;}}};}@Overridepublic void run() {// TODO Auto-generated method stubwhile(isRun){if(!tasks.isEmpty()){doTask(tasks.poll());}}}/*** UI層向MainService中發送任務task* UI層調用,所以static* @param task*/public static void newTask(Task task){tasks.add(task);}/*** UI層向MainService中發送任務的同一時候。相同要發送自己Activity,* 以便在MainService中調用refresh();* @param task*/public static void addActivty(Activity activity){appActivities.add(activity);}/*** UI層中有向MainService中傳遞Activity,在任務結束後(refresh)。應去除該Activity,防止混淆!

* @param activity*/public static void reMoveActivty(Activity activity){appActivities.remove(activity);}/*** 通過name擷取新開任務時傳遞過來的Activity執行個體* @param name* @return*/public Activity getActivityByName(String name){if(!appActivities.isEmpty()){for(Activity activity:appActivities){if(activity.getClass().getName().indexOf(name)>0){return activity;}}}return null;}/*** 處理Tasks堆棧中的task* @param task*/public void doTask(Task task){Message msg=handler.obtainMessage();msg.what=task.getTaskID();switch(task.getTaskID()){//登入操作case Task.WEIBO_LOGIN:System.out.println("login successful");msg.obj="登入成功";break;//通過access_token擷取使用者資訊,並儲存到資料庫操作case Task.GET_USERINFO_BY_TOKEN:msg.obj="成功";break;//登入介面擷取使用者資訊顯示操作case Task.GET_USERINFO_IN_LOGIN:msg.obj="成功";break;default :break;}handler.sendMessage(msg);}@Overridepublic IBinder onBind(Intent intent) {// TODO Auto-generated method stubreturn null;}}


再看看我的project檔案架構,例如以:

Task.java是任務的實體類,包括任務的ID。任務的參數成員變數,IWeiboActivity就是全部Activity要實現的介面。

  歡迎各位關注我的個人網站:http://fangjie.sinaapp.com/ 

Android新浪微博client(一)——主架構搭建

聯繫我們

該頁面正文內容均來源於網絡整理,並不代表阿里雲官方的觀點,該頁面所提到的產品和服務也與阿里云無關,如果該頁面內容對您造成了困擾,歡迎寫郵件給我們,收到郵件我們將在5個工作日內處理。

如果您發現本社區中有涉嫌抄襲的內容,歡迎發送郵件至: info-contact@alibabacloud.com 進行舉報並提供相關證據,工作人員會在 5 個工作天內聯絡您,一經查實,本站將立刻刪除涉嫌侵權內容。

A Free Trial That Lets You Build Big!

Start building with 50+ products and up to 12 months usage for Elastic Compute Service

  • Sales Support

    1 on 1 presale consultation

  • After-Sales Support

    24/7 Technical Support 6 Free Tickets per Quarter Faster Response

  • Alibaba Cloud offers highly flexible support services tailored to meet your exact needs.