是否有任何方法/工具来控制在android平台上的进程内运行的线程,例如让一些线程延迟一段随机时间。
背景:我是QA工程师。我想看看是否有些线程被迫慢慢运行,整个应用程序会发生什么?我想看到其他类型的错误,而不是ANR。对于多线程,如果程序员不使用或使用错误策略来同步线程,则可能会发生一些错误。所以我想做这种测试。
答案 0 :(得分:1)
你只需要照顾UIThread,实际上Android会为你照顾它。考虑到这一点,尝试不在此线程中进行任何密集操作,因为您无法完全控制它(请参阅activity lifecycle)
只要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)
}
}
在这个例子中,一个普通的Thread用于控制我们绘制的方式/时间和延迟。 resume和pause方法允许我们控制该线程,以便我们可以在使用它的活动在后台时停止绘制,并在它返回时重新启动它(覆盖onPause和onResume)