2

我正在尝试侦听将图片发送到我的 android 的连接,然后将此图像设置为图像视图。

该过程应自动完成以模拟推送内容行为。

此代码在 TCPConHandler 类中

public void listenForIncomingImageFlag() {
        new Thread(new Runnable() {

            @Override
            public void run() {
                try {
                    FlagScan = new Scanner(mySocket.getInputStream());
                    while (true) {
                        Flag = FlagScan.nextInt();
                        Log.d("FLagImage", "Flag ="+Flag);
                        if (Flag == 1) {
                            listenForIncomingImage(true);
                            Flag = 0;
                        }

                    }
                } catch (IOException e) {
                    // TODO Auto-generated catch block
                    e.printStackTrace();
                }

            }
        }).start();

    }

只要运行 tcp 连接的线程返回一个套接字,就会调用这个函数。然后它启动另一个函数listenForIncomingImage。

public void listenForIncomingImage(boolean b) {
        check = b;
        Thread InComImage = new Thread(new Runnable() {
            @Override
            public void run() {
                try {
                    inComImageBitmap = BitmapFactory.decodeStream(mySocket
                            .getInputStream());
                    MainActivity.setImage(inComImageBitmap, true);
                    check = false;
                    Log.d("Bitmap", "Bitmap receviced and sent to method");
                } catch (IOException e) {
                    // TODO Auto-generated catch block
                    e.printStackTrace();
                }

            }
        });
        InComImage.start();

    }

现在的事情是将图像传递给 mainactivity 中的 imageUpdate 函数,如果我使用的是 runOnUiThread,我会收到调用非静态方法的错误。

public void imageUpdate() {
        new Thread(new Runnable() {
            @Override
            public void run() {
                while (true) {
                    runOnUiThread(new Runnable() {
                        public void run() {
                            while(imageCheck == true){
                            myImage.setImageBitmap(finalImage);
                            imageCheck = false;}

                        }
                    });
                }
            }
        }).start();
    }

所以我必须在 mainactivity 时启动这个线程,并在接收位图时使用从 tcpConHandler 类发送的 imagecheck 布尔值以某种方式阻止它。

这样做会导致应用程序超载内存并崩溃是否有更好的方法来模拟 android 上的推送内容行为。

无论如何,在 mainactivity 上是否有一个函数,它运行一个带有 while(true) 块的线程,可以更新 ui 并且可以是静态的?. 或任何类似的实现。

4

1 回答 1

1

如果我使用 runOnUiThread 调用非静态方法时出现错误

因为您需要发送MainActivity上下文以从非活动类tcpConHandler访问,而不是以静态方式调用。runOnUiThreadrunOnUiThread

创建一个tcpConHandler构造函数来传递 Activity 上下文:

public class TcpConHandler{
Activity activity;

public TcpConHandler(Activity activity){
 this.activity=activity;
}
//...your code here..
public void imageUpdate() {
//...your code here...
     activity.runOnUiThread(new Runnable() {
       public void run() {
              // update imageView here...
          }
      });
}

通过发送活动实例从 MainActivity 创建 TcpConHandler 对象;

TcpConHandler tchConhandler=new TcpConHandler(this);
于 2013-03-31T13:44:27.143 回答