Warning: file_get_contents(/data/phpspider/zhask/data//catemap/0/unity3d/4.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Java 如何在android平台上控制进程内运行的线程_Java_Android_Multithreading_Testing_Adb - Fatal编程技术网

Java 如何在android平台上控制进程内运行的线程

Java 如何在android平台上控制进程内运行的线程,java,android,multithreading,testing,adb,Java,Android,Multithreading,Testing,Adb,是否有任何方法/工具可以控制android平台上进程内运行的线程,例如让一些线程随机延迟一段时间。 背景:我是一名质量保证工程师。我想看看如果一些线程被迫缓慢运行,整个应用程序会发生什么情况?我希望看到其他类型的错误,而不是ANR。对于多线程,若程序员不使用或使用错误的策略来同步线程,可能会发生一些错误。所以我想做这种测试 您只需处理UIThread,实际上Android会为您处理它。考虑到这一点,尽量不要在此线程中执行任何密集操作,因为您无法完全控制它(请参阅) 只要UIthread是好的,

是否有任何方法/工具可以控制android平台上进程内运行的线程,例如让一些线程随机延迟一段时间。

背景:我是一名质量保证工程师。我想看看如果一些线程被迫缓慢运行,整个应用程序会发生什么情况?我希望看到其他类型的错误,而不是ANR。对于多线程,若程序员不使用或使用错误的策略来同步线程,可能会发生一些错误。所以我想做这种测试

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

只要UIthread是好的,你就不会注意到一个响应缓慢的应用程序,对于其余的线程,我建议你看看不同的类,这将简化与这个UIthread通信的任务; &,有更多的选择,但这两个是最重要的(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)

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

只要UIthread是好的,你就不会注意到一个响应缓慢的应用程序,对于其余的线程,我建议你看看不同的类,这将简化与这个UIthread通信的任务; &,有更多的选择,但这两个是最重要的(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)

您能否提供有关您提到的其余线程的更多详细信息,以及如何在Java中控制它们?谢谢。你能提供更多关于你提到的其他线程的细节吗,如何在Java中控制它们?谢谢