我有一個BluetoothSocket mmSocket;
在我的主要活動的公共cass中聲明。開始另一個活動時不破壞主要活動
在i的函數ASIGN值的變量,如果連接的I啓動一個線程。
UUID uuid = UUID.fromString("00001101-0000-1000-8000-00805f9b34fb");
mmSocket = mmDevice.createRfcommSocketToServiceRecord(uuid);
mmSocket.connect();
mConnectedThread = new ConnectedThread(mmSocket);
mConnectedThread.start();
我的代碼運行正常。
但是,當我在菜單中啓動另一個活動,如果我在不到5秒的主活動返回線程是從BT OK OK(確定)和MI應用。但是如果當我回到主要活動的時候,我更多的停留在活動B的10秒內,那麼變量mmSocket就是null,我的線程被殺死。
Intent i = new Intent(getApplicationContext(), AjustesActivity.class);
i.putExtra("distancia", Math.floor(MetrosRecorridos/10));
i.setFlags(Intent.FLAG_ACTIVITY_NEW_TASK);
i.setFlags(Intent.FLAG_ACTIVITY_REORDER_TO_FRONT);
startActivityForResult(i, 3);
任何解決方案?
EDIT(05/08/2015)
在我的服務類,我有:
@Override
public int onStartCommand(Intent intent, int flags, int startId) {
//In this part i connected whith Bluetooth.
new Handler().post(new Runnable() {
@Override
public void run() {
byte[] buffer = new byte[2500];
int bytes;
while (true) {
try {
bytes = mmInStream.read(buffer);
String readMessage = new String(buffer, 0, bytes);
sendMessage(readMessage);
} catch (IOException e) { }
}
});
}
private void sendMessage(String Msg) {
Intent intent = new Intent("custom-event-name");
intent.putExtra("message", Msg);
LocalBroadcastManager.getInstance(this).sendBroadcast(intent);
}
,並在我的mainactivity:
@Override
public void onCreate(Bundle savedInstanceState) {
LocalBroadcastManager.getInstance(this).registerReceiver(mMessageReceiver,
new IntentFilter("custom-event-name"));
}
private BroadcastReceiver mMessageReceiver = new BroadcastReceiver() {
@Override
public void onReceive(Context context, Intent intent) {
String message = intent.getStringExtra("message");
}
};
當我調試的主要胡亞蓉沒有收到消息。任何想法?
謝謝
只是刪除'i.setFlags(Intent.FLAG_ACTIVITY_REORDER_TO_FRONT);'作爲其作出一個實例上的活動和不'startActivityForResult' –
工作怎麼樣的onSaveInstanceState使用 (HTTP://開發商。 android.com/reference/android/app/Activity.html#onSaveInstanceState(android.os.Bundle,android.os.PersistableBundle))來保存你需要的變量?然後,當活動重新創建時,您可以再次檢索它。但是,如果您需要一個應該保持的線程,則可以使用服務(http://developer.android.com/guide/components/services。HTML) –
你如何認爲你的線程被殺害?線程沒有被綁定到活動 - 你可能只會失去對它的引用。線程只能通過stop()方法或finish run()方法停止。請認準你的堆棧轉儲 – ceph3us