Android基礎知識總結

来源:https://www.cnblogs.com/Amy-Mei/archive/2018/07/23/9355166.html
-Advertisement-
Play Games

Android四大組件 1、Activity a、Activity是指與用戶交互的界面。 b、一個Activity通常就是一個單獨的屏幕(視窗)。 c、Activity之間通過Intent傳遞數據。 2、service a、service在後臺運行,沒有圖形界面。 b、service的啟動方式有兩種 ...


Android四大組件

1、Activity

a、Activity是指與用戶交互的界面。

b、一個Activity通常就是一個單獨的屏幕(視窗)。

c、Activity之間通過Intent傳遞數據。

2、service

a、service在後臺運行,沒有圖形界面。

b、service的啟動方式有兩種:startService,是由其它組件調用startService方式啟動的,當服務處於started狀態時,與其它組件的生命周期沒有聯繫了,即使其它組件銷毀了服務依然處在運行的狀態,因此,在服務完成任務後需要調用stopService()或者sotpself()方法停止。 bindService,調用者與服務綁定在一起,一旦調用者銷毀,服務也跟著銷毀。

c、service需要在AndroidManifest中聲明,使用<service android:name=".MyService"></service>

3、BroadcastReceiver

a、使用它對你應用外部的事件經行過濾,只對感興趣的外部事件(如當電話呼入、數據網路可用時)接收時做出響應。

b、廣播接收器也沒有用戶界面。它們可以啟動一個activity、serice或NotificationManager來響應它們收到的信息.

c、廣播接收者的註冊方式有兩種,一種是靜態註冊,在AndroidManifast中使用

<receiver android:name=".MyBroadcastReceiver">

 <intent-filter>

   <action android:name="test"/>

 </intent-filter>  

</receiver>

另一種是動態註冊,

MyBroadcaetReceiver broad=new MyBroadcastReceiver();

IntentFilter intentfilter=new IntentFilter();

intentfilter.addAction(ACTION);

registerReceiver(broad);

4、ContentProvider

a、android平臺提供了contentProvider使一個應用程式的指定數據集提供給其它應用程式。其它應用程式可以用ContentResolver類從該內容中獲取數據。

b、只有需要在多個應用程式之間共用的數據時才需要ContentProvider.

c、ContentProvider用於保存或獲取數據,並使其對所有應用程式可見。這是不同應用程式之間數據共用的唯一方式。

d、ContentProvider使用URL來標識數據集,這裡的URL是唯一的,以content://作為首碼,表示該數據由ContentProvider來管理。

Android中常用的佈局

1.LinearLayout線性佈局

LinearLayout容器中的組件一個挨一個排列,通過Android:orientation屬性控制各個組件是橫向還是縱向排列。

2.FrameLayout幀佈局

FrameLayout直接繼承ViewGroup組件。幀佈局為每一個加入其中的組件創建一個空白區域,每個子組件占據一幀,這些幀根據gravity屬性執行自動對齊。

3、RelativeLayout相對佈局

為了控制該佈局內容的各個組件分佈,RelativeLayout提供的一個內部類RelativeLayout.LayoutParams。

4、TableLayout表格佈局

TableLayout繼承自LinearLayout,本質上仍然是線性佈局管理器.表格佈局採用行、列的形式來管理UI組件,並不需要明確的聲明包含多少行,多少列,而是通過添加TableRow、其它組件來控製表格的行數和列數。每向TableLayout中添加一個TableRow就代表一行,每向TableRow中添加一個組件就代表一列。

5、Android4.0新增的網格佈局GridLayout

GridLayout是Android4.0增加的網格佈局控制項,與TableLayout有些相似,它把整個容器劃分為rows*columns個網格,每個網格可以放置一個組件。比TableLayout性能好。

6、AbsoluteLayout絕對佈局

AbsoluteLayout是由開發人員通過X、Y坐標來控制組件的位置。每個組件都可以指定layout_x;layout_y;

JSON/XML數據解析

XML

 通過InputStream獲取流的方式解析

InputStream is=connent.getInputStream();

XmlPullParser pullparser=Xml.newPullParser();

pullparser.setInput(is,"utf-8");

int type=pullparser.getEventType();

while(type!=XmlPullParser.END_DOCUMENT){

          swith(type){

               case XmlPullParser.START_TAG:

                     String name=pullparser.getName();

                    if("student".equals(name)){

                          String  str= pullparser.getAttrbuteName(0);

                             }else if("sname".equals(name)){

                             String sname=pullparser.nextText();

                              }

               break;     

            case XmlPullParser.END_TAG:

                     break;           

}

       type=pullparser.next();

}

is.close();

JSON解析

InputStream is=connection.getInputStream();

int len=0;

byte[] buf= new byte[1024];

StringBuffer sb=new StringBuffer(); 

while ((len=is.read(buf))!=-1){ 

                  String s=new String(buf,0,len);

                  sb.append(s);

}

BigObject bigObject=JSON.parseObject(sb.toString(),BigObject.class); 

int count=bigObject.getCount();

Log.i("test",count+"");

 List<Student> stuList=bigObject.getStudents(); 

         for (Student sss : stuList) {

                 Log.i("test",sss.getSname()+" "+sss.getSsex());

          }

    Android的數據存儲方式   

1、SharedPreferences方式     

   SharedPreferences用來存儲一些簡單的數據,以鍵值對的方式存儲數據。       

2、資料庫SQLite

     SQLite是Android所帶的一個標準的資料庫,支持SQL語句,是一個輕量級的嵌入式資料庫。

3、網路存儲

  以POST請求方式把數據發送到某一個地址上

4、文件存儲

    在Android中,提供了openFileInput和openFileOutput方法讀取設備上的文件,

             FileOutputStream fos=openFileOutput("fileName",Contex.MODE_PRIVATE);

             FileInputStream   fls=openFileInput("fileName");

當FileOutputStream指定的文件不存在時,android會自動創建一個。預設情況下會覆蓋原來的文件。

5、ContentProvider         

Android內部唯一一個可以實現數據共用的方法。一個ContentProvider類實現了一組標準的方法介面,從而能讓其它應用讀取。外部的程式通過ContentResolute介面訪問ContentProivder提供的數據。

Handler機制、原理              

handler機制是更新UI界面的機制,可以接收消息也可以發送消息。

handler的原理:handler封裝消息的發送;Looper 消息封裝的載體,內部包含一個MessageQueue,所有的handler發送的消息都走向這個消息隊列,Looper.looper方法,就是一個死迴圈,不斷的從MessageQueue中讀取消息,如果有消息就處理消息,沒有就阻塞;handler負責發送消息,Looper負責接收消息,並把消息傳回handler。MessageQueue存儲消息的容器。

Android圖片的二次採樣以及緩存機制

1、二次採樣

a、用BitmapFactory解碼圖片時,有時候會失敗。這可能是由於圖片過大造成的。因此,需要分配更少的記憶體空間來存儲。BitmapFactory.decodeFile(imageFile);

b、BitmapFactory.Options.inSimpleSize 設置恰當的inSimpleSize可以使BitmapFactory分配更少的空間以消除錯誤。

c、BitmapFactory.Options提供inJustDecodeBounds屬性,inJustDecodeBounds設置位true後,decodeFile就不會分配空間,但可以計算出原始圖片的長度和寬度。即可得到一個恰當的inSampleSize。緩存機制,讀取:記憶體--強引用--軟引用--文件--網路。詳見https://www.cnblogs.com/RabbitLx/p/5792268.html;

Android自定義View的設計和使用

1、首先繼承View類

2、必須實現其中的一個構造方法,一般都是實現兩個;

3、重寫onDraw(canvas)方法進行繪製,畫線,畫圓,畫矩形等;

4、重寫onMesure(),調整大小,預設是全屏;

5、如需樣式在xml中佈置,自定義屬性 。


您的分享是我們最大的動力!

-Advertisement-
Play Games
更多相關文章
  • 寫sql時我們經常會遇到需要把從多張表查詢的集果集進行合併。這時就用到了union。使用union或union all 時一定要保證查詢的列的一致性 。不然sql會報錯。欄位不一致的話可以用單引號來占位。 例: 下麵就來說明union和union all的區別 準備一張測試數據表。註意mysql中的 ...
  • 一:安裝Oracle 資料庫軟體 1.先去官網下載所需文件:http://www.oracle.com/technetwork/database/enterprise-edition/downloads/index.html 2.選中兩個壓縮包同時解壓到一個文件 3.解壓文件後運行文件進行安裝 4. ...
  • 配置Mysql Group Replication遇到的一些問題的記錄 ...
  • 重裝了一下系統,裝了centos7,但是centos7下預設沒有安裝mysql,有MariaDB資料庫,網上的解釋是: “MariaDB資料庫管理系統是MySQL的一個分支,主要由開源社區在維護,採用GPL授權許可。開發這個分支的原因之一是:甲骨文公司收購了MySQL後,有將MySQL閉源的潛在風險 ...
  • 在實現分庫分表的情況下,資料庫自增主鍵已無法保證自增主鍵的全局唯一。為此,MyCat 提供了全局 sequence,並且提供了包含本地配置和資料庫配置等多種實現方式, ...
  • 一. 使用sql提示 sql 提示(sql hint)是優化資料庫的一個重要手段, 是在sql語句中加入一些人為的提示來達到優化操作的目的。 1.1 use index 在查詢語句中表名的後面,添加use index 強制mysql使用該索引,不考慮其它索引。 1.2 ignore index 在查 ...
  • 先連接好資料庫,然後打開左側 對象資源管理器,選擇資料庫 右鍵單擊 > 選擇導入數據層應用程式 根據提示嚮導一步步走就行了 部分導入失敗以及處理方案 異常1 : 在資料庫master中拒絕 create database 許可權 處理方法:可能你當前登陸的用戶名沒有該許可權,可以直接使用Windows身 ...
  • 一、分支結構 1.If函數 語法:if(條件,值1,值2) 功能:實現雙分支 應用範圍:begin – 中 或者 外面 2.case結構 語法一:結構switch結構 case 變數或者表達式 when 值1 then 語句1; when 值2 then 語句2; … else 語法n; end c ...
一周排行
    -Advertisement-
    Play Games
  • 移動開發(一):使用.NET MAUI開發第一個安卓APP 對於工作多年的C#程式員來說,近來想嘗試開發一款安卓APP,考慮了很久最終選擇使用.NET MAUI這個微軟官方的框架來嘗試體驗開發安卓APP,畢竟是使用Visual Studio開發工具,使用起來也比較的順手,結合微軟官方的教程進行了安卓 ...
  • 前言 QuestPDF 是一個開源 .NET 庫,用於生成 PDF 文檔。使用了C# Fluent API方式可簡化開發、減少錯誤並提高工作效率。利用它可以輕鬆生成 PDF 報告、發票、導出文件等。 項目介紹 QuestPDF 是一個革命性的開源 .NET 庫,它徹底改變了我們生成 PDF 文檔的方 ...
  • 項目地址 項目後端地址: https://github.com/ZyPLJ/ZYTteeHole 項目前端頁面地址: ZyPLJ/TreeHoleVue (github.com) https://github.com/ZyPLJ/TreeHoleVue 目前項目測試訪問地址: http://tree ...
  • 話不多說,直接開乾 一.下載 1.官方鏈接下載: https://www.microsoft.com/zh-cn/sql-server/sql-server-downloads 2.在下載目錄中找到下麵這個小的安裝包 SQL2022-SSEI-Dev.exe,運行開始下載SQL server; 二. ...
  • 前言 隨著物聯網(IoT)技術的迅猛發展,MQTT(消息隊列遙測傳輸)協議憑藉其輕量級和高效性,已成為眾多物聯網應用的首選通信標準。 MQTTnet 作為一個高性能的 .NET 開源庫,為 .NET 平臺上的 MQTT 客戶端與伺服器開發提供了強大的支持。 本文將全面介紹 MQTTnet 的核心功能 ...
  • Serilog支持多種接收器用於日誌存儲,增強器用於添加屬性,LogContext管理動態屬性,支持多種輸出格式包括純文本、JSON及ExpressionTemplate。還提供了自定義格式化選項,適用於不同需求。 ...
  • 目錄簡介獲取 HTML 文檔解析 HTML 文檔測試參考文章 簡介 動態內容網站使用 JavaScript 腳本動態檢索和渲染數據,爬取信息時需要模擬瀏覽器行為,否則獲取到的源碼基本是空的。 本文使用的爬取步驟如下: 使用 Selenium 獲取渲染後的 HTML 文檔 使用 HtmlAgility ...
  • 1.前言 什麼是熱更新 游戲或者軟體更新時,無需重新下載客戶端進行安裝,而是在應用程式啟動的情況下,在內部進行資源或者代碼更新 Unity目前常用熱更新解決方案 HybridCLR,Xlua,ILRuntime等 Unity目前常用資源管理解決方案 AssetBundles,Addressable, ...
  • 本文章主要是在C# ASP.NET Core Web API框架實現向手機發送驗證碼簡訊功能。這裡我選擇是一個互億無線簡訊驗證碼平臺,其實像阿裡雲,騰訊雲上面也可以。 首先我們先去 互億無線 https://www.ihuyi.com/api/sms.html 去註冊一個賬號 註冊完成賬號後,它會送 ...
  • 通過以下方式可以高效,並保證數據同步的可靠性 1.API設計 使用RESTful設計,確保API端點明確,並使用適當的HTTP方法(如POST用於創建,PUT用於更新)。 設計清晰的請求和響應模型,以確保客戶端能夠理解預期格式。 2.數據驗證 在伺服器端進行嚴格的數據驗證,確保接收到的數據符合預期格 ...