2016-09-15 5 views
0

나는 다음과 같이 내 콜백 함수에서 스레드를 가지고 :Android에서 스레드를 중지하는 방법은 무엇입니까?

@Override 
public void onConnectError(final BluetoothDevice device, String message) { 
    Log.d("TAG","Trying again in 3 sec."); 
    runOnUiThread(new Runnable() { 
     @Override 
     public void run() { 
      Handler handler = new Handler(); 
      handler.postDelayed(new Runnable() { 
       @Override 
       public void run() { 
        //Do something 
       } 
      }, 2000); 
     } 
    }); 
} 

내가 뒤로 버튼 또는들의 OnDestroy을 누를 때 위의 스레드를 닫 것이다. 내가 어떻게 해. 당신이

@Override 
public void onBackPressed() { 
    // Close or distroy the thread 
} 
@Override 
public void onDestroy() { 
    // Close or distroy the thread 
} 
+0

처리기를 중지 하시겠습니까? –

+0

'Runnable'은 한 번만 실행됩니다. –

+0

블루투스 연결이 끊어지면 'onConnectError'가 자동으로 호출되기 때문에. 그래서 2 초마다 로그를 보았습니다. 어떻게 그걸 막을 수 있니? Handler에서 온 것일 수도 있습니다 – user8264

답변

1

을 도움이되기를 바랍니다 활동에 독립적 인을 way.See이 같은

private Handler handler; 
private Runnable runnable; 

@Override 
public void onConnectError(final BluetoothDevice device, String message) { 
Log.d("TAG","Trying again in 3 sec."); 
runOnUiThread(new Runnable() { 
    @Override 
    public void run() { 
     handler = new Handler(); 
runnable = new Runnable() { 
     @Override 
     public void run() { 
//Do something 
     } 
    }; 
handler.postDelayed(runnable, 2000); 
    } 
}); 
} 
을주세요

@Override 
public void onBackPressed() { 
if (handler != null && runnable != null) { 
     handler.removeCallbacks(runnable); 
    } 
} 

and onDestroy();

1

나는이에서 스레드를 사용하는 대부분이있어 감사

public class TestActivity extends Activity { 

@Override 
protected void onCreate(Bundle savedInstanceState) { 
    super.onCreate(savedInstanceState); 
    setContentView(R.layout.abc); 

    holdConnectionHandler.sendEmptyMessage(0); 

} 

Handler holdConnectionHandler = new Handler() { 

public void handleMessage(android.os.Message msg) { 
// do some work 

    holdConnectionHandler.sendEmptyMessageDelayed(0, 10 * 1000); 
} 
}; 

@Override 
public void onDestroy() { 
super.onDestroy(); 

holdConnectionHandler.removeCallbacksAndMessages(null); 
// or 
holdConnectionHandler.removeMessages(0); 

} 
} 

감사이 당신에게

+0

holdConnectionHandler는'ononConnectError'의 지역 변수입니다. 내 o'nDestroy 함수에서 어떻게 호출 할 수 있습니까? – user8264

+0

로컬이 아닙니다. 아무 방법과 마찬가지로 사용할 수 있습니다. 한 번 시도해보고 어디서나 붙어 있으면 알려주세요. – Saveen

+0

onConnectError의 주요 기능을보고 해당 기능의 메소드에 사용할 수 있습니까? 나는 그것을 테스트 할 것이다 – user8264