仿迅雷之Anroid版-工程結構

來源:互聯網
上載者:User

仿迅雷之Anroid版-工程結構
一般開發的時候,我喜歡想好基本的功能模組,做Anroid一般就是想好有哪些功能,想好需要用到哪些開源的庫,想好需要哪些最基本的功能類; 比如檔案的操作,Bitmap的操作,Sqlite的操作,UI的自訂,螢幕的基本資料等。 所以一般我會分為下面幾個部分(這也是做了幾個小項目慢慢積累的一些東西): 同樣:高手可以指點指點,或者飄過~~~ 等項目完成之後我們會項目發布到github上面,寫的雖然很爛,但是對於我們這些初學者應該還是可以參考的。

順便提下,訊息推送用的是AndroidPN,參考http://www.cnblogs.com/hanyonglu/archive/2012/03/16/2399655.html
下載http://sourceforge.net/projects/androidpn/files/
使用都比較簡單,看看參考就行:關鍵是有源碼可以修改,這裡把點擊訊息的事件改了下,讓點擊訊息的時候直接進行相應的處理;而不是跳轉到一個詳細頁面,點擊OK才觸發操作;還有一個問題我將會做修改,就是主介面的應用中心的訊息如何推送 - 我打算把服務端的訊息推動增加一個功能,App:content的形式進行推送,對於前端收到類似這樣的訊息,不再進行訊息通知,而是通知到啟動了的程式,通知程式去更新應用中心訊息,並且區分是連結,公告還是其它(這個雖然沒開始,但是應該是可以實現的);
說到這,我想起還需要驗證一個關於AndroidPN效能的問題,我會做個測試:伺服器支援多少用戶端的推送 - 我大體會開n個線程做測試;
com.errorvenus.fxunlei
下面有主介面和開機畫面,開機畫面這裡封裝了下,主要是開機畫面裡面開了線程,主要是做一些初始化工作:比如建立檔案夾,擷取螢幕資訊,sqlite.db的拷貝(從assert或者從伺服器下載後拷貝到應用程式的data下面 - 這樣可以實現使用者資料同步),還有啟動訊息推送的等相關操作。
這裡的開機畫面被封裝成了一個抽象類別,提供抽象方法(5s之後跳轉):

 
  1. public abstract class MDSplashActivity extends Activity
  2. {

  3. @Override
  4. protected void onCreate(Bundle savedInstanceState)
  5. {
  6. // TODO Auto-generated method stub
  7. super.onCreate(savedInstanceState);

  8. ///< 開機動畫
  9. View view = LayoutInflater.from(this).inflate(setLayoutId(), null);
  10. setContentView(view);
  11. AlphaAnimation alphaAnimation = new AlphaAnimation(1.0f,0.0f);
  12. alphaAnimation.setDuration(5000);
  13. view.startAnimation(alphaAnimation);

  14. ///< 非同步初始化
  15. new Thread(new Runnable()
  16. {
  17. @Override
  18. public void run()
  19. {
  20. handler();
  21. }
  22. }).start();

  23. new Handler().postDelayed(new Runnable()
  24. {
  25. public void run()
  26. {
  27. Intent mainIntent = new Intent(MDSplashActivity.this, setToActivity());
  28. MDSplashActivity.this.startActivity(mainIntent);
  29. MDSplashActivity.this.finish();
  30. }

  31. }, 5000);
  32. };

  33. /**
  34. * 除顯示和跳轉外的額外處理
  35. */
  36. public abstract void handler();

  37. /**
  38. * 提供一個要漸隱的view
  39. * @return
  40. */
  41. public abstract int setLayoutId();

  42. /**
  43. * 設定要跳轉的Activity.class
  44. * @return
  45. */
  46. public abstract Class<?> setToActivity();
相信應該還是實用的。
com.errorvenus.log
自訂日誌類,主要是方便自訂日誌的輸出,同時,增加崩潰捕獲的一個功能,上傳到後台伺服器,方便查閱;我知道有人喜歡用System.out輸出,但是日誌多了之後,去挨個刪除很費勁。 而且還會漏掉,所以如果自訂的話,就可以把自訂的介面注釋掉,這樣很容易找到哪些地方打了日誌; 日誌多了其實會影響效能的。 可能有些用會很好用的日誌庫,或者說使用像友盟這樣的平台。

com.errovenus.listen
雖然這個工程只有一個主介面,但是功能區還是有三四個,左邊菜單功能區,自訂標題列功能區,中間內容功能區,應用中心功能區,我們不可能把所有的監聽事件都搞到一個類裡面,這樣代碼太龐大,維護起來很費勁,所以需要單獨把事件提出來,每個功能監聽處理處理一個功能區。 當前像內容功能區是沒有單獨的監聽處理的,而是放到了Adapter中處理:原因是左邊功能表列的監聽處理後的結構是通過內容功能區去顯示的,是通過適配器的方式進行的,所以內容的點擊處理都是再適配器裡面做的。

com.errovenus.adapter
這裡面就主要是為功能表列功能實現做的。主要是正在下載的內容,已經下載的內容,隱私等。所以會有兩三個適配器,對應的適配器的”條目“主要在com.errovenus.data中,也就是listview裡面顯示的”條目“的基本資料;

com.errovenus.core
這裡面我把程式檔案夾建立的累放在這裡了,之後也會把資料庫具體資料的操作類從com.errovenus.data移動到這裡;因為core主要是業務核心相關,涉及到具體的業務操作,會放到這裡,個人習慣或者規定吧。

像其它的也可以最佳化,擴充,好的結構可能需要很長的時間去構思。
最後基本的內容結構大體如下 - 後續肯定還會做最佳化(裡面有一些是之前做項目積累下來的一些工具類 MD打頭的):





聯繫我們

該頁面正文內容均來源於網絡整理,並不代表阿里雲官方的觀點,該頁面所提到的產品和服務也與阿里云無關,如果該頁面內容對您造成了困擾,歡迎寫郵件給我們,收到郵件我們將在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.