Android2高级编程读书笔记——第二章(1)

硬件限制带来的设计考虑:

开发要假设网络情况糟糕的情况,可以把模拟器的在run configuration选项卡中选择target找到Network Speed设置为EDGE模式

考虑用户环境:

行为得当:当应用程序不可见时,暂停UI更新和网络查找,后台运行使用Service,没有额外的UI开销

流畅的从后台切换到前台:可以通过保存程序的状态并把更新放入队列保障这点

合理:决不能抢占注意力,或打断用户当前的活动。当程序不在前台时可以使用Toast或者通知提示用户关注

呈现一致的用户界面

快速响应:

Android通过下面两个条件来确定响应性:

  • 应用程序必须在5秒内对任何用户动作做出响应
  • 一个BroadcastReceiver必须在10秒内从它的onReceive方法返回

最有可能导致没有响应错误的原因是:网络查找、复杂计算、文件I/O。有很多方法保证这些动作不会超过响应条件,比如服务,工作线程等。

实战例子todoItem

layout文件:

<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
    xmlns:tools="http://schemas.android.com/tools"
    android:orientation="vertical"
    android:layout_width="fill_parent"
    android:layout_height="fill_parent" >
	<EditText 
	    android:id="@+id/myEditText"
	    android:layout_width="fill_parent"
	    android:layout_height="wrap_content"
	    android:text="New To Do Item"
	    />
	<ListView
	    android:id="@+id/myListView"
        android:layout_width="fill_parent"
        android:layout_height="wrap_content"
     />
</LinearLayout>

 java文件:

package com.example.todo_list;

import java.util.ArrayList;

import android.os.Bundle;
import android.app.Activity;
import android.view.KeyEvent;
import android.view.Menu;
import android.view.View;
import android.widget.ArrayAdapter;
import android.widget.EditText;
import android.widget.ListView;

public class MainActivity extends Activity {

    @Override
    public void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.activity_main);
        ListView myListView = (ListView)findViewById(R.id.myListView);
        final EditText myEditText = (EditText)findViewById(R.id.myEditText);
        final ArrayList<String> todoItems = new ArrayList<String>();
        final ArrayAdapter<String> aa;
        aa = new ArrayAdapter<String>(this, android.R.layout.simple_list_item_1, todoItems);
        myListView.setAdapter(aa);
        myEditText.setOnKeyListener(new View.OnKeyListener() {
			
			@Override
			public boolean onKey(View v, int keyCode, KeyEvent event) {
				if(event.getAction() == KeyEvent.ACTION_DOWN){
					todoItems.add(0, myEditText.getText().toString());
					aa.notifyDataSetChanged();
					myEditText.setText("");
					return true;
				}
				return false;
			}
		});
    }

    @Override
    public boolean onCreateOptionsMenu(Menu menu) {
        getMenuInflater().inflate(R.menu.activity_main, menu);
        return true;
    }
}

相关推荐