Android 开发最佳实践有哪些?

文章导读
Previous Quiz Next 在开发 Android 应用程序时,可以遵循一些最佳实践。这些实践由 Android 官方推荐,并会随着时间不断改进。
📋 目录
  1. A 最佳实践 - 用户输入
  2. B 最佳实践 - 后台任务
  3. C 最佳实践 - 性能
  4. D 最佳实践 - 安全与隐私
  5. E 示例
A A

Android - 最佳实践



Previous
Quiz
Next

在开发 Android 应用程序时,可以遵循一些最佳实践。这些实践由 Android 官方推荐,并会随着时间不断改进。

这些最佳实践包括交互设计特性、性能、安全与隐私、兼容性、测试、分发和变现提示等内容。它们已被归纳并列于下方。

最佳实践 - 用户输入

每个文本字段都有不同的用途。例如,有些文本字段用于输入文本,有些用于输入数字。如果是用于输入数字,那么当该文本字段获得焦点时,最好显示数字键盘。其语法如下。

<EditText
   android:layout_width="wrap_content"
   android:layout_height="wrap_content"
   android:id="@+id/editText"
   android:layout_alignParentRight="true"
   android:layout_alignParentEnd="true"
   android:hint="User Name"
   android:layout_below="@+id/imageView"
   android:layout_alignLeft="@+id/imageView"
   android:layout_alignStart="@+id/imageView"
   android:numeric="integer" />

除此之外,如果您的字段用于输入密码,则必须显示密码提示,以便用户轻松记住密码。可以这样实现。

<EditText
   android:layout_width="wrap_content"
   android:layout_height="wrap_content"
   android:id="@+id/editText2"
   android:layout_alignLeft="@+id/editText"
   android:layout_alignStart="@+id/editText"
   android:hint="Pass Word"
   android:layout_below="@+id/editText"
   android:layout_alignRight="@+id/editText"
   android:layout_alignEnd="@+id/editText"
   android:password="true" />

最佳实践 - 后台任务

应用程序中有某些任务在后台运行。这些任务可能是从互联网获取数据、播放音乐等。推荐不要在 UI 线程中执行长时间等待的任务,而应在后台使用 service 或 AsyncTask 执行。

AsyncTask 与 Services 的比较

两者都用于执行后台任务,但 service 不受大多数用户界面生命周期事件的影响,因此在会关闭 AsyncTask 的情况下,service 仍能继续运行。

最佳实践 - 性能

您的应用程序性能应达到标准。但它不应仅在前台表现良好,而应在设备连接电源或充电时在后台表现出色。充电可能来自 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.
// 我们如何充电?来自 AC 或 USB。
int chargePlug = batteryStatus.getIntExtra(BatteryManager.EXTRA_PLUGGED, -1);

最佳实践 - 安全与隐私

确保应用程序安全非常重要,不仅是应用程序本身,用户数据和应用程序数据也应得到保护。可以通过以下因素提升安全性。

  • 优先使用内部存储而非外部存储来保存应用程序文件

  • 尽可能使用 content providers

  • 连接网络时使用 SSL

  • 使用适当的权限来访问设备的不同功能

示例

下面的示例演示了开发 Android 应用程序时应遵循的一些最佳实践。它创建一个基本应用程序,允许您指定如何使用文本字段,并通过检查手机的充电状态来提升性能。

要实验这个示例,您需要在实际设备上运行。

步骤 描述
1 您将使用 Android Studio IDE 在包 com.example.sairamkrishna.myapplication 下创建一个 Android 应用程序。
2 修改 src/MainActivity.java 文件以添加代码
3 修改布局 XML 文件 res/layout/activity_main.xml,根据需要添加任何 GUI 组件。
4 运行应用程序,选择一个运行中的 Android 设备,将应用程序安装到该设备上并验证结果。

以下是 src/MainActivity.java 的内容

package com.example.sairamkrishna.myapplication;

import android.content.Intent;
import android.content.IntentFilter;
import android.os.BatteryManager;
import android.support.v7.app.ActionBarActivity;
import android.os.Bundle;
import android.view.View;
import android.widget.Button;
import android.widget.EditText;
import android.widget.Toast;

public class MainActivity extends ActionBarActivity {
   EditText ed1,ed2;
   Button b1;

   @Override
   protected void onCreate(Bundle savedInstanceState) {
      super.onCreate(savedInstanceState);
      setContentView(R.layout.activity_main);

      ed1=(EditText)findViewById(R.id.editText);
      ed2=(EditText)findViewById(R.id.editText2);
      b1=(Button)findViewById(R.id.button);

      b1.setOnClickListener(new View.OnClickListener() {
         @Override
         
         public void onClick(View v) {
            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;

            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
   protected void onDestroy() {
      super.onDestroy();
   }
}

以下是 activity_main.xml 的内容

<?xml version="1.0" encoding="utf-8"?>
   <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:paddingLeft="@dimen/activity_horizontal_margin"
   android:paddingRight="@dimen/activity_horizontal_margin"
   android:paddingTop="@dimen/activity_vertical_margin"
   android:paddingBottom="@dimen/activity_vertical_margin" 
   tools:context=".MainActivity">
   
   <TextView android:text="Bluetooth Example" 
      android:layout_width="wrap_content"
      android:layout_height="wrap_content"
      android:id="@+id/textview"
      android:textSize="35dp"
      android:layout_alignParentTop="true"
      android:layout_centerHorizontal="true" />
      
   <TextView
      android:layout_width="wrap_content"
      android:layout_height="wrap_content"
      android:text=""
      android:id="@+id/textView"
      android:layout_below="@+id/textview"
      android:layout_centerHorizontal="true"
      android:textColor="#ff7aff24"
      android:textSize="35dp" />
      
   <ImageView
      android:layout_width="wrap_content"
      android:layout_height="wrap_content"
      android:id="@+id/imageView"
      android:src="@drawable/abc"
      android:layout_below="@+id/textView"
      android:layout_centerHorizontal="true" />
      
   <EditText
      android:layout_width="wrap_content"
      android:layout_height="wrap_content"
      android:id="@+id/editText"
      android:layout_alignParentRight="true"
      android:layout_alignParentEnd="true"
      android:hint="User Name"
      android:layout_below="@+id/imageView"
      android:layout_alignLeft="@+id/imageView"
      android:layout_alignStart="@+id/imageView"
      android:numeric="integer" />
      
   <EditText
      android:layout_width="wrap_content"
      android:layout_height="wrap_content"
      android:id="@+id/editText2"
      android:layout_alignLeft="@+id/editText"
      android:layout_alignStart="@+id/editText"
      android:hint="Pass Word"
      android:layout_below="@+id/editText"
      android:layout_alignRight="@+id/editText"
      android:layout_alignEnd="@+id/editText"
      android:password="true" />
      
   <Button
      android:layout_width="wrap_content"
      android:layout_height="wrap_content"
      android:text="Check"
      android:id="@+id/button"
      android:layout_below="@+id/editText2"
      android:layout_centerHorizontal="true" />
      
</RelativeLayout>

以下是 Strings.xml 的内容

<resources>
    <string name="app_name">My Application</string>
</resources>

以下是 AndroidManifest.xml 的内容

<?xml version="1.0" encoding="utf-8"?>
<manifest xmlns:android="http://schemas.android.com/apk/res/android"
   package="com.example.sairamkrishna.myapplication" >

   <application
      android:allowBackup="true"
      android:icon="@drawable/ic_launcher"
      android:label="@string/app_name"
      android:theme="@style/AppTheme" >
      
      <activity
         android:name="com.example.sairamkrishna.myapplication.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>

让我们尝试运行您的应用程序。我假设您已将实际的 Android 移动设备连接到计算机。要从 Android Studio 运行应用,请打开项目的一个 activity 文件,然后点击工具栏中的 Run Eclipse Run Icon 图标。Android Studio 将显示以下图像。

Anroid Capture Tutorial

上面的图像显示了应用程序的输出

Anroid BestPractices Tutorial

现在,只需在用户名字段中输入文字,您将看到内置的 Android 字典建议开始出现。这在上图中显示。

Anroid BestPractices Tutorial

现在您将看到密码字段。一旦您开始在字段中输入,它就会消失。上图中显示。

最后,只需将设备连接到 AC 电源线或 USB 线,然后按下充电检查按钮。以我的情况为例,我连接了 AC 电源,它显示以下消息。

Anroid BestPractices Tutorial