成人免费xxxxx在线视频软件_久久精品久久久_亚洲国产精品久久久_天天色天天色_亚洲人成一区_欧美一级欧美三级在线观看

Android應用處理過程簡單理解

移動開發 Android
本文通過作者自己做的一個應用,而總結出其對于Android應用的簡單理解,與各位網友分享。

做了個應用,總結下對于android 應用的簡單理解

從上圖可以簡單看出,主線程啟動,這里把各種操作稱為action,主要分為3部分:

ui(視圖繪制)、event(事件處理)和other(數據或網絡等處理)

1.當點擊圖標啟動應用A時,系統有個luncher應用會根據A應用里AndroidManifest.xml中聲明的<category android:name="android.intent.category.LAUNCHER" />

找到對應啟動的activity:

  1. <application 
  2.         android:icon="@drawable/icon_luncher" 
  3.         android:label="@string/app_name" 
  4.         android:theme="@android:style/Theme.Translucent.NoTitleBar.Fullscreen" > <span></span>     
  5.     <activity 
  6.              android:label="@string/app_name" 
  7.             android:name=".home.MainActivity" 
  8.             android:exported="true" //設置此屬性,允許外部應用發Intent跳轉到此Activity;普通情況下,不需要次屬性也可實現跳轉,當次應用涉及到系統權限或簽名后,跳轉時需要設置被跳轉的activity此屬性 
  9.             android:screenOrientation="landscape" 
  10. ndroid:configChanges="orientation|keyboardHidden" //設置為橫屏顯示,不讓屏幕切換為豎屏 
  11.             android:launchMode="singleInstance">//單例模式,詳情可以參考android的4種啟動模式 
  12.              <intent-filter> 
  13.                 <action android:name="android.intent.action.MAIN" /> 
  14.                 <category android:name="android.intent.category.LAUNCHER" /> 
  15.             </intent-filter> 
  16.             <intent-filter> 
  17.                 <action android:name="android.other.skip.action"/> 
  18.                 <action android:name="android.intent.action.VIEW" /> 
  19.                 <category android:name="android.intent.category.DEFAULT" /> 
  20.             </intent-filter> 
  21.      </activity> 
  22.  </application><span></span> 

問題:

a.當在應用列表中沒有找到剛安裝的應用A時,可以查看著這個xml中有無設置這個圖標 android:icon="@drawable/app_store"和聲明

<category android:name="android.intent.category.LAUNCHER" />

b.如果調試的話,可以用命令行啟動這個activity:am start -n 包名/包名.activity名,如:com.aaa.bbb/com.aaa.bbb.MainActivity

2.啟動Activity,首先到oncreate方法里,setContentView(R.layout.main)顯示布局內容(這里的Activity的啟動流程詳情了解android生命周期)

這里,整個初始化Activity想來是初步完成了。

接下來,會在做一些控件的操作,這里操作歸結到UI繪制里。如:

  1. TextView tv = new TextView(this); 
  2.     tv.setTextSize(24); 
  3.     tv.setText("UI繪制"); 
  4.     tv.setOnFocusChangeListener(new OnFocusChangeListener() { 
  5.     <pre class="brush:java; toolbar: true; auto-links: false;"@Override 
  6.          public void onFocusChange(View v, boolean hasFocus) {//事件處理 
  7.              if (hasFocus) {  
  8.     <pre class="brush:java; toolbar: true; auto-links: false;"><span></span>            new Thread(new Runnable(){//大數據處理 
  9.                     @Override 
  10.                     public void run(){ 
  11.                         //這里不能直接做Ui處理,如tv.setText("線程中處理數據")等操作 
  12.                          //1.線程中更新ui可以用Handler直接post(Runnable)方法刷新 
  13.                             new Handler().post(new Runnable(){ 
  14.                                 @Override 
  15.                                 public void run(){ 
  16.                                     updateUI();  //這個自定義方法中可以做ui操作 
  17.                                 }    <span></span> <span></span>                         
  18.                             });    
  19.                         //2.用handler 發送消息 
  20.                         <span></span>      
  21.                         //3.繼承AsyncTask類更新ui     
  22.                     } 
  23.                 }).start();</pre> 
  24.     } else { 
  25.                 //TODO 
  26.              } 
  27.          }</pre> 
  28.     }); 

3.上面代碼UI繪制、事件處理和數據處理都簡單說明了一番。接下來就來簡單理解下這3者關系:

a.初始化界面顯示,UI繪制已自動完成

b.當用戶操作按鍵(或觸屏)時,對應的事件就會觸發:按鍵(onKeyLisetner、onKeyDown(我用的最多就是這個了O(∩_∩)O~)...)、觸摸(onTouchListener...)等

這些事件當中可以直接更新UI,如:tv.invalidate()。具體的一些事件處理,如控制焦點都可在這里實現。

c.tv的invalidate()調用后,會最后調用到TextView里onDraw()方法,這個真正來繪制內容的方法

d.處理大數據或網絡數據時,一般另起線程。android中在非主線程里是不能夠直接更新ui或做ui操作的。為此,adnroid提供消息機制,用Handler發送消息到

Messager queue,消息隊列會

自動通知主線程,主線程可以從中獲取消息中的參數,來更新對應的UI組件,如下面一個例子:

聲明Handler:

  1. Handler h=new Handler(new Callback() { 
  2.         @Override 
  3.         public boolean handleMessage(Message msg) { 
  4.         Bundle data  = msg.getData(); 
  5.         switch (msg.what) { 
  6.         case 0x0//network err 
  7. Toast.makeText(MainActivity.this,getString(R.string.init_notice), 3000).show(); 
  8. index_layout.setBackgroundResource(Color.TRANSPARENT); 
  9.             img_manager.requestFocus(); 
  10.             break
  11.             case 0x1:   //update 
  12.                 showNoticeDialog(); 
  13.             break
  14.             default
  15.             break
  16.             } 
  17.             return false
  18.         } 
  19.     }); 

在之前的線程當中,

  1. //2.用handler 發送消息 
  2.     h.senh.sendEmptyMessage(0x1); 
  3.     //或者 
  4.     /*Message msg = new Message(); 
  5.      msg.what = 0x0; 
  6.      Bundle data= new Bundle(); 
  7.      data.putString("AAA", "BBB"); 
  8.      msg.setData(data); 
  9.      h.sendMessage(msg); 
  10.     */ 

當要在其他類當中用handler發消息,那就想辦法把當前Activity中的h實例傳過去。

這樣最終更新UI都是在主線程里實現的。

責任編輯:閆佳明 來源: oschina
相關推薦

2009-09-24 17:11:53

Hibernate處理

2009-07-20 17:49:07

JSF請求處理

2010-06-09 18:17:20

Postfix郵件

2010-06-02 18:00:05

Postfix郵件

2011-04-11 16:42:05

Oracle無法啟動

2009-07-15 16:29:41

Swing繪畫

2011-02-21 13:26:47

Postfix郵件處理

2011-08-04 15:24:53

iPhone開發 交互 MVC

2021-02-01 09:00:34

Ceph octopu集群運維

2009-01-27 17:32:00

虛擬化部署案例

2021-01-06 08:13:08

公有云Docker容器

2019-08-19 11:07:41

SQL數據庫優化

2020-11-12 07:32:53

JavaScript

2011-07-04 14:38:43

QT Qevent

2018-05-30 09:47:02

2021-11-08 08:29:57

Oracle數據庫后端開發

2009-07-24 10:57:41

ASP.NET ISAIIS6

2011-04-13 14:57:11

ASP.NET請求處理

2009-07-28 11:32:41

光纖鏈路故障

2011-04-13 15:50:49

.htmHTTP請求處理
點贊
收藏

51CTO技術棧公眾號

主站蜘蛛池模板: 最新国产精品视频 | 国产一区二区在线视频 | 亚洲精品乱 | 日韩精品在线一区二区 | 婷婷丁香在线视频 | 精品美女视频在线观看免费软件 | 精品国产一区久久 | 日本精品视频 | 久久久免费毛片 | 日韩手机视频 | 蜜桃视频一区二区三区 | 中文字幕亚洲区一区二 | 日韩欧美国产一区二区三区 | 国产精品久久久久久一级毛片 | 中文字幕av一区二区三区 | 日韩精品一区二区三区中文字幕 | 日韩中文一区二区三区 | 亚洲最大的黄色网址 | 国产成人精品一区二区三区网站观看 | 亚洲精品久久国产高清情趣图文 | 91一区二区三区 | 精品欧美一区二区久久久伦 | 国产99久久精品一区二区永久免费 | 天天躁日日躁狠狠很躁 | 日韩视频国产 | 日韩欧美视频免费在线观看 | 天天操操 | 国产一区二区在线视频 | 一级做a爰片性色毛片16 | 欧美自拍第一页 | 国产欧美一区二区三区在线看 | 国产精品免费一区二区三区四区 | 国产精品一区二区免费看 | 超碰在线观看97 | 欧美日韩国产精品一区 | 亚洲高清视频一区 | 五月激情六月婷婷 | 日韩中文字幕免费在线观看 | 久久精品一级 | 嫩草视频在线 | 午夜激情在线视频 |