1

是否有任何方法/工具来控制在android平台上的进程中运行的线程,例如让一些线程延迟随机时间。
背景:我是一名 QA 工程师。我想看看如果某些线程被强制运行缓慢,整个应用程序会发生什么?我希望看到其他类型的错误而不是 ANR。对于多线程,如果程序员不使用或使用不好的策略来同步线程,可能会发生一些错误。所以我想做这种测试。

4

1 回答 1

1

您只需要处理 UIThread,实际上 Android 会为您处理它。考虑到这一点,尽量不要在此线程中执行任何密集操作,因为您无法完全控制它(请参阅活动生命周期

只要 UIthread 没问题,您就不会注意到应用程序响应缓慢,对于其余线程,我建议您查看不同的类,这将简化与此 UIThread 通信的任务; Asynctask & Handlers,还有更多的选择,但是这两个是最重要的(imo)

其余线程,您可以像在 Java 中一样控制它们,甚至在需要时休眠它们。

让我们看一个例子:

public class MapView extends SurfaceView implements Runnable{
   Thread t = null;
   SurfaceHolder holder;
   boolean draw = false;


@Override
public void run() {
   while (draw) {
   if (!holder.getSurface().isValid())
   continue;

    Canvas c = holder.lockCanvas();
    //Draw something
    holder.unlockCanvasAndPost(c);

    try {
        Thread.sleep(50);
    } catch (InterruptedException e) {
    e.printStackTrace();
  }
}


void pause() {
 draw = false;
try {
        t.join(); // this will cause the main thread to wait for this one to  
        //finish and then it can safely access its data.
} catch (InterruptedException e) {
        e.printStackTrace();
    }
    t = null;
  }

  void resume() {
       draw = true;
    t = new Thread(this);
    t.start(); // This will look for our run method (this)
 }

}

在这个例子中,一个普通的线程用于控制我们绘制的方式/时间和延迟时间。resume 和 pause 方法让我们控制该线程,因此如果使用它的活动在后台,我们可以停止绘制并在它返回时重新启动它(覆盖 onPause 和 onResume)

于 2013-06-15T16:24:56.427 回答