gpt4 book ai didi

java - 需要在AsynkTask中等待broadcastReceiver中的事件

转载 作者:行者123 更新时间:2023-12-01 08:49:02 26 4
gpt4 key购买 nike

由于某些原因,我需要调用一个方法,我们将其命名为 foo(),并返回 some_data (byte[])。

在这个函数中,我调用一个异步任务,它返回我的 some_data。但是,在这个 aynctask 中,我必须等待来自 BroadcastReceiver 的事件才能继续该过程。

因为我需要非异步返回 foo(),所以我必须像这样调用我的 asyncktask :

byte[] some_data = myTask.execute().get();
return some_data;

但是,当我使用 get() 时,这会卡住主线程,并且在这个主线程中,我有我的 BroadcastReceiver :

    private final BroadcastReceiver mRecv = new BroadcastReceiver() {

@Override
public void onReceive(Context context, Intent intent) {
if (intent.getAction().equals(ReaderHelper.BROADCAST_WRITE_DATA)) {
final String dataReceive = intent.getStringExtra("log");
//some process
dataReceived = true;
}
}
};

所以,我的 asynkTask 不再需要,因为我等待 dataReceived = true 继续:

    @Override
protected byte[] doInBackground(Object... voids) {
for (Pair<Integer, Integer> sector : sectorToRead) {
sendBytes(sector.first, sector.second);
waitingReceive();
//todo rajouter relance commande si trop d'echec ?
}

//some process and return finalData
return finalData;
}

我的函数 waitingReceive 的代码:

    private void waitingReceive() {
while (!dataReceived) {
try {
Thread.sleep(10);
} catch (InterruptedException e) {
e.printStackTrace();
}
}
dataReceived = false;
}

因此,waintingReceive() 启动了一个无限循环,因为我使用了asyntask.execute.get() 并且我卡住了我的主线程,我猜这是broadcastReceiver 中的回调。

我该如何继续?谢谢

最佳答案

never use Thread.sleep(10) and u can use handler like wise

Handler handler;
Runnable runnable;
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_main);

handler = new Handler();
Runnable runnable = new Runnable() {
@Override
public void run()
{
if (dataReceived)
{
cancelHandler();
}
}
};
handler.postDelayed(runnable, 100);
}

public void cancelHandler()
{
handler.removeCallbacks(runnable);
}

关于java - 需要在AsynkTask中等待broadcastReceiver中的事件,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/42505602/

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