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);
最佳實踐 - 安全和隱私
它是應用程序應該是安全的,而不是僅重視應用,但用戶數據和應用程序數據也應得到保障。安全性可提高受以下因素。
-
使用內部存儲而不是外部存儲應用程序的文件
-
儘可能使用內容提供商
-
連接到網絡時使用SSL
-
使用適當的權限來訪問設備的不同功能
例子
下麵的例子演示了一些開發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應用程序的選項。
選擇移動設備作為一個選項,然後檢看移動設備將顯示如下畫麵。
現在,隻需鍵入的用戶名字段,會看到內置的詞典建議將啟動顯示出來。這如下所示。
現在,將看到提示在密碼字段。它儘快將消失,開始寫入的字段。它如下所示。
最後,隻需將設備連接到AC線或USB線,按下充電複選按鈕。就我而言,通過USB電纜連接PC,以便它顯示以下信息。