안드로이드 개발 질문/답변
(글 수 45,052)
화면분할을 해서 이미지를 동시에 여러개를 받아오는 소스를 짜 보았습니다~ 에러가 생겻는데 도와주세요~
제가 만들고자 하는것은 제대로 되나 속도가 너무 느려요
원래 만들고자 한것은 멀티뷰라고 2분할 4분할 6분할 이렇게 메뉴가 있고
2분할을 하면 두개의 이미지를 동시에 받아와 보여주는거고
4분할은 4개의 이미지를 동시에 받아오게 6분할은 6개의 이미지를 동시에 받아오게 짜보았습니다~
메뉴에 따라서 각각 쓰레드와 핸들러를 만들어서 사용하고 있습니다
(쓰레드3개, 핸들러3개)
소스를 너무 발코딩을해서 무겁다고 생각되는데 어떻게 수정해야할지 모르겠네요
주먹구구식으로 소스를 짜 보았는데,, 초보라 깔끔하게 어떻게 만들어야 될지 모르겟네요,,
소스가 너무 길어 간단하게 적겠습니다^^;
public void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
if (multi == 2) {
setContentView(R.layout.multi2);
imgView1 = (ImageView) findViewById(R.id.imgview1); //이미지뷰
imgView2 = (ImageView) findViewById(R.id.imgview2);
imgView1.setOnClickListener(clk); //이미지뷰에 클릭리스너 장착
imgView2.setOnClickListener(clk);
imagePath1 = "http://" + str + ":8080/cam_1.jpg"; //이미지 경로
imagePath2 = "http://" + str + ":8080/cam_2.jpg";
LoadImageMain.start(); //1번 쓰레드 실행
} else if (multi == 4) {
setContentView(R.layout.multi4);
imgView1~4 = (ImageView) findViewById(R.id.imgview1~4); // 이미지뷰를 4분할이라 4개 생성
imgView1~4.setOnClickListener(clk); // 클릭리스너를 4개 생성
imagePath1 = "http://" + str + ":8080/cam_1.jpg"; // 이미지 경로 4개
LoadImageMain1.start(); //2번 쓰레드 실행
} else if (multi == 6) {
setContentView(R.layout.multi6);
imgView1~6 // 1~6분 까지 이미지 뷰 생성
imgView1.setOnClickListener(clk); // 클릭리스너를 6개 생성
imagePath1 = "http://" + str + ":8080/cam_1.jpg"; //6개의 이미지 경로
LoadImageMain2.start(); //3번 쓰레드 실행
}
}
// 1번 쓰레드
class LoadImageThread extends Thread {
public void run() {
while (loop) {
handler.sendEmptyMessage(0);
try {
Thread.sleep(800);
} catch (InterruptedException e) {
// TODO Auto-generated catch block
loop = false;
e.printStackTrace();
}
if (mQuit) {
break; //뒤로가기 버튼 클릭시 쓰레드 종료
}
}
}
}
// 2번 쓰레드
class LoadImageThread1 extends Thread {
1번과 동일
}
// 3번 쓰레드
class LoadImageThread2 extends Thread {
1번과 동일
}
//1번 핸들러
Handler handler = new Handler() {
@Override
public void handleMessage(Message msg) {
LoadImage(imagePath1, imgView1);
LoadImage(imagePath2, imgView2);
super.handleMessage(msg);
}
};
//2번 핸들러
Handler handler1 = new Handler() {
@Override
public void handleMessage(Message msg) {
LoadImage(imagePath1, imgView1);
LoadImage(imagePath2, imgView2);
LoadImage(imagePath3, imgView3);
LoadImage(imagePath4, imgView4);
super.handleMessage(msg);
}
};
//3번 핸들러
Handler handler2 = new Handler() {
@Override
public void handleMessage(Message msg) {
LoadImage(imagePath1, imgView1);
LoadImage(imagePath2, imgView2);
LoadImage(imagePath3, imgView3);
LoadImage(imagePath4, imgView4);
LoadImage(imagePath5, imgView5);
LoadImage(imagePath6, imgView6);
super.handleMessage(msg);
}
};
//이미지 불러오기, 이미지를 받아 비트맵형식으로 처리후 이미지뷰에 장착
public void LoadImage(String $imagePath, ImageView ImageView) {
// TODO Auto-generated method stub
InputStream inputStream = OpenHttpConnection($imagePath);
Bitmap bm = BitmapFactory.decodeStream(inputStream);
ImageView.setImageBitmap(bm);
}
긴 소스를 봐주셔서 정말 감사합니다 ^^*
이렇게 긴 소스를 어떻게 줄이고 원할하게 작동되게 할지 정말 고민이네요,,
작동은 하나 너무 무거워서 정상적인 동작을 할 수 없을 정도입니다 ㅠㅠ
고수님들의 조언 부탁드립니다^^*
(제가 많이 초보라,, 쉽게 풀어서 설명해주시면 정말 감사하겠습니다^^*)




이 블로그의 내용이 필요하실듯 하군요,
http://codemuri.tistory.com/entry/%EB%B2%88%EC%97%AD-%EC%84%B1%EB%8A%A5%EC%9D%84-%EC%9C%84%ED%95%9C-%EB%A9%80%ED%8B%B0%EC%93%B0%EB%A0%88%EB%94%A9-Multithreading-For-Performance