Android 60問60答 (一篇復習整個Android)
有哪些移動端平臺?
廠商開發(fā)平臺:
-
los
-
黑莓(blackBerry)
第三方私有平臺:第三方開發(fā)供移動設備廠商使用
- WindowsMobile
免費開源平臺:
-
Android
-
Symbian
Android中Linux內(nèi)核的作用
-
充當用戶和設備之間的接口。
-
管理所用活動內(nèi)存和資源共享
-
充當設備上所安裝的應用的主機
-
常由硬件制造商使用,因為它提供一個硬件抽象層,可在硬件發(fā)生變化時,確保上層保持不變
Android使用的數(shù)據(jù)庫是?
SQLite,提供可用于所有應用的功能強大的輕量級關(guān)系數(shù)據(jù)庫
Android有哪些構(gòu)建塊?
-
活動:專為一個清晰的目的提供獨特的可視化UI
-
服務:始終在后臺,完成特定的任務
-
內(nèi)容提供者:存儲和檢索存儲在文件、SQLite、web或任何其他持久化存儲位置的數(shù)據(jù)
-
廣播接收器:相應系統(tǒng)范圍內(nèi)廣播通知的應用的組成部分
Android項目的目錄結(jié)構(gòu)
-
/src/main/java
:項目使用的java源文件 -
/build
:編譯后生成文件 -
libs
:專有庫 -
/src/main/resourse
:應用資源文件,有-
Drawable:位圖文件或者繪制對象資源類型的xml文件
-
Mipmap:使用于不同啟動器圖標密度的可會址對象文件
-
Layout:用于定義用戶界面布局的XML文件
-
Menu:定義應用菜單的XML文件
-
Raw:需要以原始形式保存的任意文件
-
Values:包括字符串、整數(shù)、顏色等簡單值的xml文件
-
小部件的常用屬性
屬性名稱 | 關(guān)聯(lián)方法 | 描述 |
---|---|---|
android:layout_gravity | 定義如何在布局容器內(nèi)對齊小部件 | |
android_gravity | setGravity(int) | 設置對象在容器中的放置 |
android:layout_weight | 指定小部件的大小比例。如果不拉伸則設置為0,否則根據(jù)權(quán)重拉伸 |
Android顏色表示
AARRGGBB
透明度|紅|綠|藍
ListView小部件的作用
此小部件向用戶顯示一個列表,它與Java中的列表框組件類似,ListView默認支持垂直滾動。要想使用小部件,如下所示:
<ListView android:id="@id/listview"
android:layout_width="match_parent"
android:layoutheight="warp_content"
>
</ListView>
ImageView小部件
用于顯示圖像,可以從其他資源(例如drawable目錄、因特網(wǎng)、內(nèi)容提供者)加載圖像,它根據(jù)源圖像的大小調(diào)整自己的尺寸。要想使用該小部件,如下:
<ImageView android:id="@id/imageview"
android:layout_width="match_parent"
android:layoutheight="warp_content"
android:src="@drawable/map"
>
</IamgeView>
WebView小組件
用于顯示網(wǎng)頁,使用如下
<WebView android:id="@id/webview"
android:layout_width="match_parent"
android:layoutheight="warp_content"
>
</WebView>
要想加載網(wǎng)頁需要在Java中調(diào)用:
WebView view = (WebView)findViewById(R.id.webview);
view.loadUrl("https://google.com");
Android布局有那些?
表格布局
此布局以行和列的形式排列其子視圖。表格航對象創(chuàng)建可容納小部件的行,表格布局的最大列數(shù)取決于用最大列數(shù)分割的行。
使用表格布局如下:
<TableLayout xmlns:android="略"
android:layout_height="fill_parent"
android:layout_height="fill_parent"
android:stretchColumns="1"
>
<TableRow>
<TextView />
<TextView />
<TextView />
<!-- 這里有三個元素,故是三列 -->
</TableRow>
</TableLayout>
框架布局
以堆棧格式從上往下添加視圖,項位置用android:gravity
屬性設置,布局的大小取決于最大視圖的大小。
使用框架布局如下:
<FrameLayout xmlns:android:"略"
android:layout_height="fill_parent"
android:layout_height="fill_parent"
>
<ImageView />
<ImageView />
<ImageView />
<!-- 這里有三個元素,故是三行 -->
</FrameLayout>
使用那個方法來關(guān)聯(lián)活動?
setContentView()
方法用于將UI與活動關(guān)聯(lián),用法如下:
public void onCreate(Bundle saveInstanceState){
super.onCreate(sabeInstanceState);
setContentView(R.layout.main);
}
如何注冊活動為主活動?
只有在manifest.xml
中注冊過的活動才能被系統(tǒng)訪問,要注冊活動如下:
<manifest ...>
<application ...>
<activity android:name="..." />
</application>
</manifest>
activity標簽中也可以添加一些屬性,比如可以指定某活動為主活動:
<activity android:name=".mainActivity">
<intent-filter>
<action android:name="android.intent.action.MAIN" />
<categort android:name="android.intent.category.LAUNCHER" />
</intent-filter>
</activity>
活動生命周期?
-
正在運行:活動對于用戶是在屏幕上可見的
-
已暫停:焦點在另一個活動上,但是此活動依然可見
-
已停止;活動被另一個活動安全覆蓋,且現(xiàn)處于后臺中。停止的活動也是活動的,其對象依然保留在內(nèi)存中
活動生命周期方法
- onResume:此方法在活動開始與用戶交互之前調(diào)用。當活動位于棧頂且準備好接收用戶輸入就會調(diào)用。
Intent的作用
意圖(intent)是用于激活應用組件(活動、服務和廣播接收器)的消息
如何使用顯式intent啟動活動?
顯式Intent指定目標組件的名稱以激活組件。
Intent intent = new Intent(MyFirstActivity.this,MySecondActicity.class);
startActivity(intent);
如何使用隱式intent啟動活動?
隱式intent用于激活其他應用中的組件,不通過名稱指定目標組件。要使得隱式的intent生效,需要為被調(diào)用的組件設置intent過濾器,intent-filter
在manifest.xml
中設置。之后可以使用隱式intent表述action,Android會自動與現(xiàn)有組件的intent過濾器比較,找到合適的組件
Intent intent = new Intent();
intent.setAction("com.anna.chapter6.a6");
intent.addCategory(Intent.CATEGORY_DEAFULT);
startActivity(intent);
如何使用Intent在組件之間傳遞數(shù)據(jù)
使用Intent
寫入方:
intent.putExtra("name","Nicole")
Intent intent = new Intent(MainActivity.this,OtherActivity.class);
intent.putExtra("name", "Nicole");
intent.putExtra("age", 25);
intent.putExtra("address", "Shenzhen");
讀取方:
Intent intent = getIntent();
String nameString = intent.getStringExtra("name");
int age = intent.getIntExtra("age",0);
String addressString = intent.getStringExtra("address");
使用Bundle
寫入方:
Intent intent = new Intent(MainActivity.this,OtherActivity.class);
Bundle bundle = new Bundle();
bundle.putString("name", "Ben");
bundle.putInt("age", 28);
bundle.putString("address", "China");
intent.putExtras(bundle); //將bundle傳入intent中。
讀取方:
Intent intent = getIntent();
Bundle bundle = intent.getExtras();
String nameString = bundle.getString("name");
int age = bundle.getInt("age");
String addressString = bundle.getString("address");
ADB是什么
Android Debug Bridge(ADB)充當開發(fā)硬件與設備/仿真器之間的通信媒介
ADB有哪些常用命令?
-
device:生成已連接的設備列表
-
pull:將指定文件從設備復制到計算機
-
push:將指定文件從計算機復制到設備
-
install<path>
:在設備上安裝應用(指定路徑)
Logcat有哪些日志級別?
-
錯誤,使用Log.e()記錄
-
警告,使用Log.w()記錄
-
信息,使用Log.i()記錄
-
調(diào)試,使用Log.d()記錄
-
詳細信息,使用Log.v()記錄
內(nèi)部存儲區(qū)與外部存儲器的概念
設備內(nèi)部的儲存,以文件存儲,屬于應用私有
外部存儲器存放在SD卡,所有應用與用戶都可以訪問
共享首選項是什么?
共享首選項是輕量級機制,用于存儲基本數(shù)據(jù)類型的鍵值對,是快速存儲默認值、類實例變量、用戶界面狀態(tài)以及用戶偏好的理想方式
一個程序的數(shù)據(jù)庫在哪?
/data/data/<package name>/databases
如何以編程的方式創(chuàng)建數(shù)據(jù)庫?
在Android中,可以使用android.database.sqlite.SQLiteDatabase
以編程方式創(chuàng)建數(shù)據(jù)庫。SQLiteDatabase類公開各種方法來管理SQLite數(shù)據(jù)庫。
操作數(shù)據(jù)庫的方法有哪些?
-
openOrCreateDatabase(String path,SQLiteDatabase.CursorFactory factory,DatabaseErrorHandler errorHandler)
-
updata(String table,ContentValue values,String whereClause,String[] whereArgs)
-
query(SQLiteDatabase db,String[] columns, String selection, Srtring[] selections,String groupby,String having,String sortOrder)
-
getColumnIndex(String ColumnName)
返回給的列名的基于0的索引,或1 -
getColumnName(int ColumnIndex)
-
excute()
如果不是SELECT、INSERT、DELETE或UPDATE,則執(zhí)行SQL語句
如何檢索受SQL語句影響的行數(shù)?
使用excuteUpadataDelete()
或excuteInsert()
方法
如何訪問內(nèi)容提供者公開的數(shù)據(jù)?
使用android.content.ContentResolver
類
ContentResolver resolver = getContentResolver();
如何讀寫內(nèi)部存儲區(qū)
寫文件:
-
使用
android.content.Context
類的openFileOutput()
方法打開或創(chuàng)建文件 -
使用
java.io.FileOutputStream
類的write()
方法將數(shù)據(jù)寫入文件 -
使用
java.io.FileOutputStream
類的close()
方法關(guān)閉文件
讀文件
-
使用
android.content.Context
類的openFileOutput()
方法打開或創(chuàng)建文件 -
使用
java.io.FileOutputStream
類的read()
方法從文件讀取數(shù)據(jù) -
使用
java.io.FileOutputStream
類的close()
方法關(guān)閉文件
getFIleDir與getDir的作用
-
getFileDir()
:獲取用于保存的內(nèi)部文件的文件系統(tǒng)目錄的絕對路徑 -
getDIr(String dirname,int node)
:在您的內(nèi)部存儲空間創(chuàng)建或打開一個現(xiàn)有目錄,接收以下參數(shù):-
dirname:要檢索的文件夾名稱
-
mode:文件的創(chuàng)建模式
-
外部環(huán)境Enviroment的有哪些狀態(tài)?
常量 | 描述 |
---|---|
MEDID_MOUNTED | 已經(jīng)在加載,可以讀寫訪問 |
MEDID_REMOVED | 不存在 |
MEDID_UNMOUNTED | 已存在但是沒有加載 |
MEDID_MOUNTED_READ_ONLY | 已存在但只讀 |
getExternalStorageDirectory(String type)
:檢索外部存儲目錄
getExternalStorageState()
:檢索外部存儲設備當前的狀態(tài),返回Environment中的某個常量
如何讀寫外部設備
需要使用getExternalStorageDirectory
方法獲取到外部存儲的路徑,然后讀寫過程與內(nèi)部存儲的讀寫方式相同
??:寫入之前需要在manifest文件中指定所需的權(quán)限
<user-permission android:name="android.permission.WRITE_EXTERNAL_STORAGE">
</user-permission>
如何檢索公共首選項
需要使用SharedPerferences
接口提供的方法
-
contains(String key)
:檢查首選項是否包含特定首選項,參數(shù)指定要檢查的key -
getXXX(String key,XXX defValue)
:它從首選項中檢索指定數(shù)據(jù)類型的值
如何獲取網(wǎng)絡權(quán)限
<user-permission android:name="android.permission.INTERNET">
</user-permission>
如何啟動一個服務
可以使用startService)
方法從引用組建啟動服務
Intent intent = new Intent(this,myService.class);
startService(intent);
啟動的服務與綁定的服務的區(qū)別
啟動的服務
啟動的服務生命周期如下:onCreate()
—>onStartCommand()
(onStart()
方法已過時) —> onDestory()
特點:
一旦服務開啟跟調(diào)用者(開啟者)就沒有任何關(guān)系了。
開啟者退出了,開啟者掛了,服務還在后臺長期的運行。
開啟者不能調(diào)用服務里面的方法。
綁定的服務
綁定的服務生命周期如下:
onCreate()
—>onBind()
—>onunbind()
—>onDestory()
注意:綁定服務不會調(diào)用onstart()
或者onstartcommand()
方法
特點:
bind的方式開啟服務,綁定服務,調(diào)用者掛了,服務也會跟著掛掉。
綁定者可以調(diào)用服務里面的方法。
什么是廣播接收器?
廣播以intent的形式傳達。要接收和響應廣播,應用要包括一個稱為廣播接收器的組件。廣播接收器不提供UI。不過,它可以創(chuàng)建狀態(tài)欄通知,以在收到播時向用戶發(fā)出提示
創(chuàng)建廣播接收器要調(diào)用哪個方法?
-
創(chuàng)建一個類來拓展BroadcastReceiver類
-
在這個派生類中重寫onReceive()方法
如何注冊廣播接收器?
以下兩種方法都可以:
在訂單文件中配置
<application ...>
<receiver android:name="./myReceiver">
<intent-filter>
<action android:name="android.net.conn.CONNECTIVITY_CHANGE" />
</intent-filter>
</receiver>
<user-permission android:name="android.permisson.ACCESSS_NETWORK_STATE" />
</application>
以動態(tài)的方式
使用與主應用線程中的過濾器匹配的廣播intent調(diào)用registerReceiver
方法,這個方法的簽名是:public abstract Intent registerReceiver(BroadcastReceiver reveiver, IntentFilter filter)
創(chuàng)建一個菜單資源要用哪些元素?
-
<menu>
:菜單資源的根結(jié)點 -
<item>
:用于創(chuàng)建菜單項 -
<group>
:是一個可選元素,允許對菜單項進行分類,從而允許共享屬性
創(chuàng)建菜單要使用哪兩個方法?
-
要重寫
onCreateIotinsMenu()
方法 -
在這個方法中創(chuàng)建
android.view.MenuInflator
類的expand
方法來拓展菜單
ViewPage是什么?
可以使用AndroidX的ViewPage小部件創(chuàng)建滑動視窗
如何將主題引用到整個引用?
在manifest中將android:thene
屬性添加到application標簽
自定義控件要拓展哪個類?
View
setGravity怎么使用?
可以使用setGravity(gavity,xOffset,yOffset)
方法將非常靈活地將消息條放在屏幕的任何位置
Toast toast = Toast,makeText(...);
toast.setGravity(Gravity.BOTTOM|Gravity.LEFT,0,0);
toast.show();
設置鬧鈴到幾種方法的區(qū)別?
-
set:設置鬧鈴
-
setRepeating:設置重復鬧鈴
-
setInexactRepeating:按照定義的時間間隔重復鬧鈴,但如果設備處于休眠狀態(tài)則不會喚醒,這樣更省電,即不準確的重復鬧鈴。
常見的定位技術(shù)有哪四種?
-
GPS
-
WiFi定位
-
IP地址定位
-
三角測量法
如何偵聽傳入的SMS
Bundle bundle = intent.getExtras();
if(buddle!=null){
Object[] pdus = (Object[]) bundle.get("pdus);
SmsMessage[] messages = new SmsMessage[pdus.length];
for(int i=0;i<pdus.length;i++){
messages[i] = SmsMessage.createFromPdu((byte[]) pdus[i])
}
}
如何監(jiān)聽電話狀態(tài)?
String nameService = Content.TELEPHONE_SERVICE;
TelephonyManager teleManager = (TelephoneManager)getSystemService(nameService);
Canvas與Paint的區(qū)別
Canvas(畫布)表示可以繪制圖形和圖像的表面。提供了多種方法來繪制簡單的圖形、路徑、位圖和文本。
Paint(畫筆)提供繪制富豪、文本和圖形的樣式和顏色的相關(guān)信息。
如何畫一個圓?
cavas.onDraw(){
// drawCircle(float cx,float cy,float radius,Paint paint);
cavas.drawCircle(50,50,30,paint);
}
MediaPlayer的getCurrentPosition與setOnPerparedListener方法的作用
-
getCurrentPosition()
:返回當前播放的位置,單位毫秒 -
setOnPerparedListener(MediaPlayer.onPerparedListener listener)
:注冊一個回調(diào)函數(shù),當媒體源準備好播放時,可調(diào)用該函數(shù)
在哪里聲明權(quán)限?
AndroidManifest.xml
如何運行時申請權(quán)限?
調(diào)用checkSelfPermisson(String perm)
來檢查權(quán)限,以保證用戶沒有把權(quán)限撤銷
使用requestPermissions(String permissions,int requestCode)
來請求權(quán)限,參數(shù)一是請求的權(quán)限,參數(shù)二隨便給一個數(shù)字文章來源:http://www.zghlxwxcb.cn/news/detail-501525.html
Android打包成什么?
.APK文章來源地址http://www.zghlxwxcb.cn/news/detail-501525.html
到了這里,關(guān)于Android 60問60答 (一篇復習整個Android)的文章就介紹完了。如果您還想了解更多內(nèi)容,請在右上角搜索TOY模板網(wǎng)以前的文章或繼續(xù)瀏覽下面的相關(guān)文章,希望大家以后多多支持TOY模板網(wǎng)!