位置:首頁 > 手機開發 > Android開發教學 > Android最佳實踐

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