android Thread에서 주의할점?
UI Thread에 명심해야 합니다.
아래 소스는Thread로 mImageView에 bitmap이미지를 입히는 것입니다.
public void onClick(View v) {
new Thread(new Runnable() {
public void run() {
Bitmap b = loadImageFromNetwork("http://example.com/image.png");
mImageView.setImageBitmap(b);
}
}).start();
}
이 소스를 실행해보시면 이미지가 입혀지지 않을겁니다.
이유는 android application이 실행될때 mian Thread가 돌아가고 main Thread에서 직접 UI Thread의 리소스에 접근하여 수정이 불가능합니다.
(android홈피에 가보면 Thread-safe methods가 어쩌고 저쩌고 ㅎㅎㅎ)
*** 주의 ***
bound service와 ContentResolver and ContentProvider classes 반드시 동시에 여러개 쓰리드가 한개 자원에 접근하는것을 방지한다
그래서 android에서는 여러가지 방안을 제시하였습니다.
1. Activity.runOnUiThread(Runnable)
2. View.post(Runnable)
3. View.postDelayed(Runnable, long)
4. AsyncTask
post를 예로 들어보자.
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();
}
자주사용 하는 AsyncTask는 Thread에 대한 개념이 없어도 사용이 가능합니다.(이놈 진짜 막강합니다. 개념없이 코딩이 가능합니다.)
*** 주의 ***
onPreExecute(), doInBackground() ,onPostExecute() 가 순서대로 실행됩니다.
public void onClick(View v) {
new DownloadImageTask().execute("http://example.com/image.png");
}
private class DownloadImageTask extends AsyncTask<String, Void, Bitmap> {
protected Bitmap doInBackground(String... urls) {
return loadImageFromNetwork(urls[0]); }
protected void onPostExecute(Bitmap result) {
mImageView.setImageBitmap(result);
}
}
제목 | 글쓴이 | 날짜 | 조회 |
---|---|---|---|
2003-09-20 |
12039 |
||
2003-09-20 |
11580 |
||
2003-09-20 |
20741 |
||
지구인 |
2010-08-27 |
19515 |
|
지구인 |
2009-09-07 |
13835 |
|
2010-01-29 |
15799 |
||
2004-10-07 |
16882 |
||
hmily1314 |
2013-02-28 |
3033 |
|
hmily1314 |
2013-02-25 |
6231 |
|
hmily1314 |
2013-02-22 |
6367 |
|
석류열매 |
2013-02-22 |
2872 |
|
hmily1314 |
2013-02-22 |
6306 |
|
2013-02-03 |
3464 |
||
2013-01-29 |
1902 |
||
2013-01-29 |
1815 |
||
종합마케팅 |
2013-01-14 |
3878 |
|
2913 [웹 프로그래밍] 프로그래머? |
직원Sd |
2013-01-13 |
2416 |
2013-01-01 |
4614 |
||
2911 [웹 디자인] 간단한 애니메이션 |
2013-01-01 |
3275 |
|
2012-12-15 |
2098 |
||
2012-12-15 |
1773 |
||
2012-12-02 |
1966 |
||
2012-11-02 |
2345 |
||
2906 [공개소스] 그누보드 4.36.07 |
2012-10-27 |
2407 |
|
2012-10-13 |
2047 |
||
2904 [공개소스] 그누보드 4.36.05 |
2012-09-25 |
2076 |
|
2012-09-22 |
4994 |
||
2012-09-19 |
3631 |