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

블루투스로 일정시간마다 데이터 전송을 하는데 전송하다 어플이 뻗어버립니다

0 추천
public class blue_RSSI extends ActionBarActivity {
    private TimerTask mTask;
    private Timer mTimer;
    BluetoothAdapter BTAdapter;
    boolean connection_state = false;
    int Bluetooth_Rssi_data = 0;
    String Device_name = "";
    int mPairedDeviceCount = 0;
    Set<BluetoothDevice> mDevices;
    BluetoothDevice  mRemoteDevice;
    BluetoothSocket mSocket  =  null;
    OutputStream mOutputStream  =  null;
    InputStream mInputStream  =  null;
    String  mStrDelimiter  =  "\n";


    protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.activity_blue__rssi);

        mTask = new TimerTask() {
            @Override
            public void run() {
                if(!connection_state) {
                    registerReceiver(receiver, new IntentFilter(BluetoothDevice.ACTION_FOUND));
                    BTAdapter = BluetoothAdapter.getDefaultAdapter();
                    BTAdapter.startDiscovery();
                }
                else {
                    String str = new String();
                    str = "[" + String.valueOf(Math.abs(Bluetooth_Rssi_data)) + "]";
                    sendData(str);
                    try {
                        mOutputStream.close();
                        mOutputStream  =  null;
                        mInputStream.close();
                        mInputStream  =  null;
                        mSocket.close();
                        mSocket  =  null;
                        unregisterReceiver(receiver);
                    } catch (IOException e) {}
                    connection_state = false;
                }
            }
        };

        mTimer = new Timer();
        mTimer.schedule(mTask, 0, 3500);
    }

안녕하세요

저는 현재 핸드폰을 이용해서 'a'라는 블루투스에 'a'의 rssi값을 3초마다 계속 자동으로 전송하는 어플을 작성중에 잇습니다.

자료를 찾아보니 rssi값을 전송하려면 'a'와 핸드폰의 연결상태를 끊어야만 rssi 값을 받을 수 있더라고요.

 

이것저것 찾아서 알고리즘을 작성했는데 알고리즘은 아래와 같습니다.

 

첫번째 타이머 태스크 시작 -> 장치스캔 -> a라는 특정 장치 발생시 해당 장치의 rssi값을 저장 - >

'a'라는 특정장치에 자동으로 연결(a라는 장치는 페어링 과정을 이전에 처리해두었습니다) ->타이머태스크 종료

두번째 타이머 태스크 시작 -> a장치에 저장된 rssi값을 전송 -> 'a'장치와 핸드폰의 블루투스 커넥션 종료(소켓과 쓰레드를 close하는 방식으로 연결을 종료합니다) -> 타이머 태스크 종료 -> 첫번째 타이머 태스크로

 

이런식의 알고리즘인데 문제점은 이것입니다.

 

일정 시간이 지난 뒤 어플리케이션이 강제종료됩니다.

연결을 끊고 재시작 하는과정에서 어딘가 부하가 계속 걸린게 터지는거 같은데 어떻게 잡아야할지 모르겠습니다.

 

 

결국 해결해야할 문제는 이전 데이터 찌꺼기를 지워야하는건데 어떻게 지워야할지 난감합니다.

 

도움을 꼭 좀 부탁드립니다!!

안상훈 (180 포인트) 님이 2015년 6월 3일 질문
로그를 먼저 찍어보시는 게 좋겠네요
질문 하실때는 에러부분의 로그를 올리세요,
그냥 도중 부하가 걸려서 터지는것 같다고 하시면 누가 답변 할 수 있을까요?

답변 달기

· 글에 소스 코드 보기 좋게 넣는 법
· 질문에 대해 추가적인 질문이나 의견이 있으면 답변이 아니라 댓글로 달아주시기 바랍니다.
표시할 이름 (옵션):
개인정보: 당신의 이메일은 이 알림을 보내는데만 사용됩니다.
스팸 차단 검사:
스팸 검사를 다시 받지 않으려면 로그인하거나 혹은 가입 하세요.
...