public class MainActivity extends Activity {
WebDownThread m_thread;
FileDownloadThread m_thread2;
String m_strTxtData;
Handler m_handler = new Handler()
{
public void HandleMessage(android.os.Message msg){
Bundle bd = msg.getData( ) ;
m_strTxtData = bd.getString( "arg" ) ;
}
};
@Override
public void onCreate(Bundle savedInstanceState)
{
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_main);
File path = new File(Environment.getExternalStorageDirectory().getAbsolutePath()+"/ljkTemp");
if(!path.exists())
path.mkdir();
m_thread = new WebDownThread(m_handler);
m_thread.start();
}
여기까지가 메인입니다.
메인액티비티에서는 m_handler 를 생성하고 WebDownThread 를 생성할때 m_handler 를 파라미터로 전달하면서 스레드가 시작됩니다.
==============================================================================================================
두번째 파일인...스레드 클래스
public class WebDownThread extends Thread {
String m_result;
URL url;
HttpURLConnection conn;
int resCode;
BufferedReader br;
StringBuilder sb = null; //문자열 저장할
BufferedReader BufReader = null;
BufferedWriter bw = null;
Handler m_handler;
public WebDownThread(Handler m_handler2) {
m_handler = m_handler2;
}
public void run()
{
String strData = "데이타";
Bundle bd = new Bundle();
bd.putString("arg", strData);
Message msg = m_handler.obtainMessage();// = m_hd.
msg.setData(bd);
m_handler.sendMessage(msg);
}
}
============================================================================================================
우선 MainActivity.java 파일안에 클래스 및 스레드가 몽땅 모여있는게 싫어서...
WebDownThread 클래스를 따로 파일로 만들었습니다 // WebDownThread .java
WebDownThread 이 생성될때 메인액티비에서 핸들러를 건내주고 그 핸들러를 토대로 sendmessage 까지 했습니다.
그렇게되면 메인액티비티의 아래 부분을 타고 올줄알았는데...브레이크 포인트를 찍고 기다려도 오지를 않더군요..
sendMessage 코드 타는거까지 확인을 했는데...HandleMessage() 에 브레이크가 타지를 않습니다.
public void HandleMessage(android.os.Message msg){
Bundle bd = msg.getData( ) ; <== break point 찍음
m_strTxtData = bd.getString( "arg" ) ;
}
한화면안에 모든 코드가 있는게 익숙하지않아서 나름 놔눠서 해보려고 노력하고있는데요....
이렇게 하는 방식이 별로 좋지 않은것인가요?
아무튼 책이나 다른곳을 보면 메인액티비티에서 스레드 및 전부다 만들고 한군데에 코드가있어서 가독성도 힘들어서 원래 MFC 하던식으로 해본건데...책이랑 달라서 그런지 핸들러를 타지를 않네요..
어디가 잘못된것인가요?
handleMessage 를 HandleMessage로 잘못 사용하신듯 하네요.
@Override
public void handleMessage(Message msg) {
// TODO Auto-generated method stub
super.handleMessage(msg);
}
이렇게 변경하셔야 할 것으로 보입니다.
음 MainThread Handler를 그 자체로 넘겨주었는데 그 handler가 어떤 Handler인지 몰라서 못넘겨주는거 아닐까요..
MainThread의 Handler도 class로 만들어서 threa의 생성자에서 해당 handler class name을 지정해서 넘겨보세용..Test는 안해봐서..
소스상으론 문제없어 보이는데..만약 문제라면 저게 아닐까 생각되네요. 혹시 handler에 warning 표시 없나요? leak 발생한다는..