마스터Q&A 안드로이드는 안드로이드 개발자들의 질문과 답변을 위한 지식 커뮤니티 사이트입니다. 안드로이드펍에서 운영하고 있습니다. [사용법, 운영진]

상속받은 인스턴스 객체를 사용하고싶습니다.

0 추천

지금 블루투스쳇을 응용한 어플을 만들고있습니다.

main엑티비티에서 핸들러를 이용 블루투스 통신을한다음  A엑티비티를 호출합니다. 그후 A엑티비티에서 버튼을 누르면

BluetoothchatService (블루투스쳇에있는 오픈소스) 에있는 wirte 메소드를 쓰려고합니다

그방법으로 main 엑티비티에서 있는

BluetoothChatService mChatService = new BluetoothChatService(this, mHandler);

에 생성한 인스턴스 객체를 얻어와 사용하려고 A엑티비티에서 main엑티비티를 상속했습니다.

그후 A엑티비티 버튼객체에서 이런명령어를 호출했습니다.

btn_Call_autoop.setOnClickListener(new OnClickListener() {
        	public void onClick(View v) {
        		byte send[] = new byte[1];
            	send[0] = 'L';
        		mChatService.write(send);
        	}
        });

그런데 여기서 문제가 main엑티비티에서 

mChatService.write(send);

사용하면 write 메소드 내에있는 log문이읽히는데

A엑티비티에서는 log문이 안읽힙니다. 따로 오류가 난것도 아니고 정상적으로 인스톨되고 런타임이나 다른에러도

안나는데 이유를잘모르곘네요

익명사용자 님이 2014년 4월 1일 질문

1개의 답변

+2 추천
상속과는 상관없는 문제입니다.

 

MainActivity 에서 AActivity를 호출하면 Main과 A는 다른 인스턴스로 생성됩니다.

즉 MainActivity에 있는 Service와 AActivity에 있는 Service가 다른 서비스가 되는것이죠. 그러므로 안찍히는게 정상입니다.
dev_아마 (9,750 포인트) 님이 2014년 4월 2일 답변
실제로 실험해보니 A->main인스턴스 -> main -> b인스턴스 ->B 가있을경우
A에서 main을상속받아 b인스턴스.b메소드를 사용하거나 main.B.메소드를 사용했을때 정상적으로 접근이가능했습니다. 이는 단순히 서비스개념이아닌 엑티비티간 단순메소드 호출이여서 가능했던건가요? 지금은
A ->main인스턴스 ->main ->b인스턴스 ->b가있을떄 main에서 핸들러를이요 b에있는 스레드에 접근했습니다. 공부하면서 찾아보니 main 에서 스레드에접근할때와 A에서 main을거쳐 b의 스레드를 접근할때 동기화문제로 안되는거같은대 어떻게해결해야할지 아직감이안잡히네요.
...