gpt4 book ai didi

android - 如何在按钮单击事件中调用异步任务

转载 作者:塔克拉玛干 更新时间:2023-11-02 22:48:37 24 4
gpt4 key购买 nike

我正在编写这个应用程序,我从 tcp 连接获取实时图像,我需要在 ImageViev 上显示它们。

我正在做的是在单击按钮时调用异步任务。但它似乎创建了许多后台线程。

这是按钮点击事件的代码

    btnLive.setOnClickListener(new OnClickListener() {

@Override
public void onClick(View v) {
// TODO Auto-generated method stub

try
{
String name = ((Button)v).getText().toString();
if(name.equalsIgnoreCase("Live"))
{
DataOutputStream dos;
DataInputStream dis;
String reply;

if(config.conn.isConnected())
{
dos = new DataOutputStream(config.conn.getOutputStream());
dos.writeBytes("STREAM-LIVE-IMAGES");
dos.flush();
//dis = new DataInputStream(in);

in = config.conn.getInputStream();
while (true)
{
new myTask().execute(in);
}
}
}
}
catch(Exception ex)
{
Log.d("Live Button ", "Exception " + ex.getMessage() );
}
}
});

这是 asyncTask 的代码

 class myTask extends AsyncTask<InputStream, Integer, Bitmap> {

protected Bitmap doInBackground(InputStream...in)
{
Bitmap bmp = null;

try
{
//Do some none UI stuff here and return a value *result
byte[] rcvPacket = ReadJpegBinaryAndRemoveDelimiter(in[0]);
bmp = BitmapFactory.decodeByteArray(rcvPacket, 0, rcvPacket.length);
Log.d("Live Image Streaming ", "Recieved Images: " + rcvPacket.length + " " + bmp);

} catch (Exception e) {
e.printStackTrace();
}
return bmp;
}

最佳答案

while (true) {                               
new myTask().execute(in);
}

因为你在循环中执行 AsyncTask,在你的例子中是无限循环,这听起来不太好,你需要改变它。

您需要在循环外执行。你不应该,绝对不能这样做。

打电话

new myTask().execute(in);

没有循环。

关于android - 如何在按钮单击事件中调用异步任务,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/11395262/

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