日本综合一区二区|亚洲中文天堂综合|日韩欧美自拍一区|男女精品天堂一区|欧美自拍第6页亚洲成人精品一区|亚洲黄色天堂一区二区成人|超碰91偷拍第一页|日韩av夜夜嗨中文字幕|久久蜜综合视频官网|精美人妻一区二区三区

RELATEED CONSULTING
相關咨詢
選擇下列產(chǎn)品馬上在線溝通
服務時間:8:30-17:00
你可能遇到了下面的問題
關閉右側(cè)工具欄

新聞中心

這里有您想知道的互聯(lián)網(wǎng)營銷解決方案
Android應用處理過程簡單理解

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

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

ui(視圖繪制)、event(事件處理)和other(數(shù)據(jù)或網(wǎng)絡等處理)

1.當點擊圖標啟動應用A時,系統(tǒng)有個luncher應用會根據(jù)A應用里AndroidManifest.xml中聲明的

找到對應啟動的activity:

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

問題:

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

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

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

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

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

 
 
 
 
  1. TextView tv = new TextView(this);
  2.     tv.setTextSize(24);
  3.     tv.setText("UI繪制");
  4.     tv.setOnFocusChangeListener(new OnFocusChangeListener() {
  5.      @Override
  6.          public void onFocusChange(View v, boolean hasFocus) {//事件處理
  7.              if (hasFocus) { 
  8.                 new Thread(new Runnable(){//大數(shù)據(jù)處理
  9.                     @Override
  10.                     public void run(){
  11.                         //這里不能直接做Ui處理,如tv.setText("線程中處理數(shù)據(jù)")等操作
  12.                          //1.線程中更新ui可以用Handler直接post(Runnable)方法刷新
  13.                             new Handler().post(new Runnable(){
  14.                                 @Override
  15.                                 public void run(){
  16.                                     updateUI();  //這個自定義方法中可以做ui操作
  17.                                 }                             
  18.                             });   
  19.                         //2.用handler 發(fā)送消息
  20.                              
  21.                         //3.繼承AsyncTask類更新ui    
  22.                     }
  23.                 }).start();
  •     } else {
  •                 //TODO
  •              }
  •          }
  •     });
  • 3.上面代碼UI繪制、事件處理和數(shù)據(jù)處理都簡單說明了一番。接下來就來簡單理解下這3者關系:

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

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

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

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

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

    Messager queue,消息隊列會

    自動通知主線程,主線程可以從中獲取消息中的參數(shù),來更新對應的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 發(fā)送消息
    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發(fā)消息,那就想辦法把當前Activity中的h實例傳過去。

    這樣最終更新UI都是在主線程里實現(xiàn)的。


    網(wǎng)頁題目:Android應用處理過程簡單理解
    文章轉(zhuǎn)載:http://www.dlmjj.cn/article/cocpohp.html