gpt4 book ai didi

java - 开始另一个 Activity 时不破坏主要 Activity

转载 作者:行者123 更新时间:2023-11-30 11:01:03 24 4
gpt4 key购买 nike

我在主要 Activity 的公共(public)类中声明了一个 BluetoothSocket mmSocket;

在一个函数中,我将值赋给一个变量,如果已连接,我将启动一个线程。

    UUID uuid = UUID.fromString("00001101-0000-1000-8000-00805f9b34fb"); 
mmSocket = mmDevice.createRfcommSocketToServiceRecord(uuid);
mmSocket.connect();
mConnectedThread = new ConnectedThread(mmSocket);
mConnectedThread.start();

我的代码运行正常。

但是,当我在菜单中开始另一个 Activity 时,如果我在不到 5 秒的时间内返回到主要 Activity ,则线程正常并且 mi 应用程序从 BT 读取正常。但是,如果我在 Activity B 中停留超过 10 秒,当我返回到主要 Activity 时,变量 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);

有什么解决办法吗?

编辑(14/07/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);
}

在我的主要 Activity 中:

@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");
}
};

当我调试主 Activity 时没有收到消息。有什么想法吗?

谢谢

最佳答案

将您的代码放入后台服务并在单独的线程中启动它。它不会被删除,直到系统需要可用空间。

如果您必须从服务到 Activity 共享数据,您可以创建新接口(interface)并使用回调或创建本地广播接收器并使用 bundle 发送 Intent 。

list :

<service
android:name=".yourBluetoothService"
android:exported="false"/>

服务文件:

public class yourBluetoothService extends Service {

@Override
public void onCreate() {
super.onCreate();
// init code
}

@Override
public int onStartCommand(Intent intent, int flags, int startId) {

Log.v("BluetoothService", "service started");

new Handler().post(new Runnable() {
@Override void run() {
//your code to start service
}
}

return super.onStartCommand(intent, flags, startId);
}

@Override
public IBinder onBind(Intent intent) {
return null;
}
}

编辑(14/07/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);
}

在我的主要 Activity 中:

@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");
}
};

当我调试主 Activity 时没有收到消息。有什么想法吗?

谢谢

关于java - 开始另一个 Activity 时不破坏主要 Activity ,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/31351778/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com