有一些做法可以遵循,在開(kāi)發(fā)Android應(yīng)用程序。這些建議由Android自身和保持在對(duì)于時(shí)間里可改善。
這些最佳實(shí)踐包括交互設(shè)計(jì)功能,性能,安全性和私隱,兼容性,測(cè)試,分發(fā)和貨幣化的提示。它們被縮小并列示如下。
每個(gè)文本字段都用于不同的工作。例如,一些文本字段是文本,有些是用于數(shù)字。如果它是數(shù)字那么最好是顯示數(shù)字鍵盤(pán)時(shí)文本字段居中。其語(yǔ)法如下。
<EditText android:id="@+id/phone" android:layout_width="fill_parent" android:layout_height="wrap_content" android:inputType="phone" />
其他然后,如果字段是密碼,那么它必須顯示密碼提示,這樣用戶(hù)可以很容易地記住密碼。它可以實(shí)現(xiàn)為如下:
<EditText android:id="@+id/password" android:hint="@string/password_hint" android:inputType="textPassword" />
但是也有一些在應(yīng)用程序后臺(tái)運(yùn)行的某些工作在應(yīng)用程序。這些工作可能是獲取從互聯(lián)網(wǎng)上的一些數(shù)據(jù)或東西,播放音樂(lè)等它建議在長(zhǎng)等待任務(wù)不應(yīng)在UI線(xiàn)程和相當(dāng)?shù)暮笈_(tái)由服務(wù)或異步工作完成。
兩者都用來(lái)做后臺(tái)任務(wù),但服務(wù)不會(huì)受到大多數(shù)用戶(hù)接口名為生命周期事件,因此在它繼續(xù)的情況下,將關(guān)閉AsyncTask運(yùn)行。
應(yīng)用程序的性能應(yīng)該是到達(dá)標(biāo)記。但它執(zhí)行不同的前端,但在后端時(shí),它的設(shè)備被連接到一個(gè)電源或充電。充電可能是從USB和電線(xiàn)。
如果設(shè)備自己充電,建議更新應(yīng)用程序的設(shè)置,如果有的話(huà),如每當(dāng)設(shè)備連接最大化刷新率。這是可以做到的。
IntentFilter ifilter = new IntentFilter(Intent.ACTION_BATTERY_CHANGED); Intent batteryStatus = context.registerReceiver(null, ifilter); // Are we charging / charged? Full or charging. int status = batteryStatus.getIntExtra(BatteryManager.EXTRA_STATUS, -1); // How are we charging? From AC or USB. int chargePlug = batteryStatus.getIntExtra(BatteryManager.EXTRA_PLUGGED, -1);
它是應(yīng)用程序應(yīng)該是安全的,而不是僅重視應(yīng)用,但用戶(hù)數(shù)據(jù)和應(yīng)用程序數(shù)據(jù)也應(yīng)得到保障。安全性可提高受以下因素。
使用內(nèi)部存儲(chǔ)而不是外部存儲(chǔ)應(yīng)用程序的文件
盡可能使用內(nèi)容提供商
連接到網(wǎng)絡(luò)時(shí)使用SSL
使用適當(dāng)?shù)臋?quán)限來(lái)訪(fǎng)問(wèn)設(shè)備的不同功能
下面的例子演示了一些開(kāi)發(fā)Android應(yīng)用程序時(shí)應(yīng)該遵循的最佳實(shí)踐。創(chuàng)建一個(gè)基本的應(yīng)用程序,允許指定如何使用文本字段,以及如何通過(guò)檢查手機(jī)的充電狀態(tài),以提高性能。
為了試驗(yàn)這個(gè)例子,需要在實(shí)際設(shè)備上運(yùn)行。
| Steps | 描述 |
|---|---|
| 1 | 使用Android Studio創(chuàng)建Android應(yīng)用程序,并將其命名為:BestPractices。在創(chuàng)建這個(gè)項(xiàng)目時(shí)確保目標(biāo)SDK編譯在Android SDK的最新版本或使用更高級(jí)別的API。 |
| 2 | 修改 src/MainActivity.j ava 文件添加代碼 |
| 3 | 如果修改所需的布局XML文件 res/layout/activity_main.xml添加GUI組件 |
| 4 | 修改 res/values/string.xml 文件,并添加必要的字符串常量組件值 |
| 5 | 修改 AndroidManifest.xml 添加必要的權(quán)限 |
| 6 | 運(yùn)行應(yīng)用程序并選擇運(yùn)行Android的設(shè)備,并在其上安裝的應(yīng)用和驗(yàn)證結(jié)果 |
這里為 src/com.yiibai.bestpractices/MainActivity.java 的內(nèi)容
package com.example.bestpractices; import android.os.BatteryManager; import android.os.Bundle; import android.app.Activity; import android.content.Intent; import android.content.IntentFilter; import android.view.Menu; import android.view.View; import android.widget.Button; import android.widget.Toast; public class MainActivity extends Activity { private Button Check; private BatteryManager battery; @Override protected void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState); setContentView(R.layout.activity_main); Check = (Button)findViewById(R.id.button1); } public void check(View view){ IntentFilter ifilter = new IntentFilter(Intent.ACTION_BATTERY_CHANGED); Intent batteryStatus = registerReceiver(null, ifilter); int status = batteryStatus.getIntExtra(BatteryManager.EXTRA_STATUS, -1); boolean isCharging = status == BatteryManager.BATTERY_STATUS_CHARGING || status == BatteryManager.BATTERY_STATUS_FULL; // How are we charging? int chargePlug = batteryStatus.getIntExtra(BatteryManager.EXTRA_PLUGGED, -1); boolean usbCharge = chargePlug == BatteryManager.BATTERY_PLUGGED_USB; boolean acCharge = chargePlug ==