Android最佳實踐


有一些做法可以遵循,在開發Android應用程式。這些建議由Android自身和保持在對於時間裡可改善。

這些最佳實踐包括互動設計功能,效能,安全性和私隱,相容性,測試,分發和貨幣化的提示。它們被縮小併列示如下。

最佳實踐 - 使用者輸入

每個文字欄位都用於不同的工作。例如,一些文字欄位是文字,有些是用於數位。如果它是數位那麼最好是顯示數位鍵盤時文字欄位居中。其語法如下。

<EditText
    android:id="@+id/phone"
    android:layout_width="fill_parent"
    android:layout_height="wrap_content"
    android:inputType="phone" />

其他然後,如果欄位是密碼,那麼它必須顯示密碼提示,這樣使用者可以很容易地記住密碼。它可以實現為如下:

<EditText
    android:id="@+id/password"
    android:hint="@string/password_hint"
    android:inputType="textPassword" />

最佳實踐 - 後台作業

但是也有一些在應用程式後台執行的某些工作在應用程式。這些工作可能是獲取從網際網路上的一些資料或東西,播放音樂等它建議在長等待任務不應在UI執行緒和相當的後台由服務或非同步工作完成。

非同步任務VS服務。

兩者都用來做後台任務,但服務不會受到大多數使用者介面名為生命週期事件,因此在它繼續的情況下,將關閉AsyncTask執行。

最佳實踐 - 效能

應用程式的效能應該是到達標記。但它執行不同的前端,但在後端時,它的裝置被連線到一個電源或充電。充電可能是從USB和電線。

如果裝置自己充電,建議更新應用程式的設定,如果有的話,如每當裝置連線最大化重新整理率。這是可以做到的。

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);

最佳實踐 - 安全和隱私

它是應用程式應該是安全的,而不是僅重視應用,但使用者資料和應用程式資料也應得到保障。安全性可提高受以下因素。

  1. 使用內部儲存而不是外部儲存應用程式的檔案

  2. 盡可能使用內容提供商

  3. 連線到網路時使用SSL

  4. 使用適當的許可權來存取裝置的不同功能

例子

下面的例子演示了一些開發Android應用程式時應該遵循的最佳實踐。建立一個基本的應用程式,允許指定如何使用文字欄位,以及如何通過檢查手機的充電狀態,以提高效能。

為了試驗這個例子,需要在實際裝置上執行。

Steps 描述
1 使用Android Studio建立Android應用程式,並將其命名為:BestPractices。在建立這個專案時確保目標SDK編譯在Android SDK的最新版本或使用更高階別的API。
2 修改 src/MainActivity.j ava 檔案新增程式碼
3 如果修改所需的布局XML檔案 res/layout/activity_main.xml新增GUI元件
4 修改 res/values/string.xml 檔案,並新增必要的字串常數元件值
5 修改 AndroidManifest.xml 新增必要的許可權
6 執行應用程式並選擇執行Android的裝置,並在其上安裝的應用和驗證結果

這裡為 src/com.yiibai.bestpractices/MainActivity.java 的內容 

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 == BatteryManager.BATTERY_PLUGGED_AC;

      if(usbCharge){
         Toast.makeText(getApplicationContext(),"Mobile is 
         charging on USB",Toast.LENGTH_LONG).show();
      }
      else{
         Toast.makeText(getApplicationContext(),"Mobile is 
         charging on AC",Toast.LENGTH_LONG).show();
      }

   }
   @Override
   public boolean onCreateOptionsMenu(Menu menu) {
      // Inflate the menu; this adds items to the action bar if it is present.
      getMenuInflater().inflate(R.menu.main, menu);
      return true;
   }

}

以下是檔案 activity_main.xml 的內容:

<RelativeLayout xmlns:android="http://schemas.android.com/apk/res/android"
   xmlns:tools="http://schemas.android.com/tools"
   android:layout_width="match_parent"
   android:layout_height="match_parent"
   android:paddingBottom="@dimen/activity_vertical_margin"
   android:paddingLeft="@dimen/activity_horizontal_margin"
   android:paddingRight="@dimen/activity_horizontal_margin"
   android:paddingTop="@dimen/activity_vertical_margin"
   tools:context=".MainActivity" >


   <TextView
      android:id="@+id/textView1"
      android:layout_width="wrap_content"
      android:layout_height="wrap_content"
      android:layout_alignParentLeft="true"
      android:layout_alignParentTop="true"
      android:layout_marginLeft="22dp"
      android:layout_marginTop="20dp"
      android:text="@string/username"
      android:textAppearance="?android:attr/textAppearanceMedium" />

   <EditText
      android:id="@+id/message"
      android:layout_width="wrap_content"
      android:layout_height="wrap_content"
      android:layout_alignLeft="@+id/textView1"
      android:layout_below="@+id/textView1"
      android:ems="10"
      android:inputType="textCapSentences|textAutoCorrect" >

   <requestFocus />
</EditText>

   <EditText
      android:id="@+id/password"
      android:layout_width="wrap_content"
      android:layout_height="wrap_content"
      android:layout_alignLeft="@+id/textView2"
      android:layout_below="@+id/textView2"
      android:layout_marginTop="34dp"
      android:ems="10"
      android:hint="@string/password_hint"
      android:inputType="textPassword" />

   <TextView
      android:id="@+id/textView2"
      android:layout_width="wrap_content"
      android:layout_height="wrap_content"
      android:layout_alignRight="@+id/textView1"
      android:layout_below="@+id/message"
      android:layout_marginTop="50dp"
      android:text="@string/password"
      android:textAppearance="?android:attr/textAppearanceMedium" />

   <Button
      android:id="@+id/button1"
      android:layout_width="wrap_content"
      android:layout_height="wrap_content"
      android:layout_below="@+id/password"
      android:layout_centerHorizontal="true"
      android:layout_marginTop="34dp"
      android:onClick="check"
      android:text="@string/check" />

</RelativeLayout>

以下是檔案 Strings.xml 的內容:

<?xml version="1.0" encoding="utf-8"?>
<resources>

   <string name="app_name">BestPractices</string>
   <string name="action_settings">Settings</string>
   <string name="hello_world">Hello world!</string>
   <string name="username">Username</string>
   <string name="password">Password</string>
   <string name="password_hint">Hello world!</string>
   <string name="check">Charging check</string>

</resources>

以下是檔案  AndroidManifest.xml 的內容:

<?xml version="1.0" encoding="utf-8"?>
<manifest xmlns:android="http://schemas.android.com/apk/res/android"
   package="com.yiibai.bestpractices"
   android:versionCode="1"
   android:versionName="1.0" >

   <uses-sdk
      android:minSdkVersion="8"
      android:targetSdkVersion="17" />

   <application
      android:allowBackup="true"
      android:icon="@drawable/ic_launcher"
      android:label="@string/app_name"
      android:theme="@style/AppTheme" >
      <activity
         android:name="com.yiibai.bestpractices.MainActivity"
         android:label="@string/app_name" >
         <intent-filter>
            <action android:name="android.intent.action.MAIN" />

            <category android:name="android.intent.category.LAUNCHER" />
        </intent-filter>
      </activity>
   </application>

</manifest>

讓我們試著執行BestPractices應用程式。啟動應用程式之前會顯示如下視窗,選擇要執行的Android應用程式的選項。

選擇移動裝置作為一個選項,然後檢看移動裝置將顯示如下畫面。

Anroid BestPractices Tutorial

現在,只需鍵入的使用者名欄位,會看到內建的詞典建議將啟動顯示出來。這如下所示。

Anroid BestPractices Tutorial

現在,將看到提示在密碼欄位。它盡快將消失,開始寫入的欄位。它如下所示。

Anroid BestPractices Tutorial

最後,只需將裝置連線到AC線或USB線,按下充電核取按鈕。就我而言,通過USB電纜連線PC,以便它顯示以下資訊。

Anroid BestPractices Tutorial