android基础(1)

/**以下内容主要来源于android-sdk-windows/docs**/

进程和线程
android的UI是非线程安全的,所以不能在工作线程中访问UI对象,两个简单的原则:
1.不要阻塞UI线程
2.不要在除UI线程外的线程中直接访问UI对象

在工作线程中访问UI对象的方法:
[list]
[*][url=http://developer.android.com/reference/android/app/Activity.html#runOnUiThread(java.lang.Runnable)]Activity.runOnUiThread(Runnable)[/url]
[*][url=http://developer.android.com/reference/android/view/View.html#post(java.lang.Runnable)]View.post(Runnable)[/url]
[*][url=http://developer.android.com/reference/android/view/View.html#postDelayed(java.lang.Runnable, long)]View.postDelayed(Runnable, long)[/url]
[/list]

例子:

public void onClick(View v) {
new Thread(new Runnable() {
public void run() {
final Bitmap bitmap = loadImageFromNetwork("http://example.com/image.png");
mImageView.post(new Runnable() {
public void run() {
mImageView.setImageBitmap(bitmap);
}
});
}
}).start();
}


推荐的方法是使用[url=http://developer.android.com/reference/android/os/AsyncTask.html]AsyncTask[/url]

private class DownloadImageTask extends AsyncTask<String, Void, Bitmap> {
/** The system calls this to perform work in a worker thread and
* delivers it the parameters given to AsyncTask.execute() */
protected Bitmap doInBackground(String... urls) {
return loadImageFromNetwork(urls[0]);
}

/** The system calls this to perform work in the UI thread and delivers
* the result from doInBackground() */
protected void onPostExecute(Bitmap result) {
mImageView.setImageBitmap(result);
}
}

//在工作线程中调用
new DownloadImageTask().execute("http://example.com/image.png");


在services和content provider中的方法通常要线程安全
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值