我想使用Surface View创建一个指南针,我发现下面的代码......但我不知道下面的代码试图实现什么,任何想法?
这是一种实施方法。我认为该方法应该被调用一次并且线程永远运行,除非调用onPause方法...但是当我尝试运行下面的代码时,Paint类只被调用一次然后退出...更新的位置传感器被忽视了。请帮忙。
@Override
public void surfaceCreated(SurfaceHolder holder) {
// TODO Auto-generated method stub
this.runDrawingThread = true;
new Thread(new Runnable()
{
public void run()
{
long l1 = System.currentTimeMillis();
long l2 = 0L;
int i = 0;
int j = 0;
long l3 = System.currentTimeMillis();
if (!Painter.this.runDrawingThread){
return;
}
if (j < 2)
{
Painter.this.onPaint(l3, true);
j++;
if ((l3 - l2) / 1000L < 1L)
l2 = l3;
}
for (i = 0; ;i++)
{
Log.i("test", "i value " + i);
while (true)
{
l1 += 16L;
l3 = l1 - l3;
if (l3 < 0L)
break;
try
{
Log.i("inside","inside the thread");
Thread.sleep(l3);
}
catch (Exception localException)
{
}
}
Painter.this.onPaint(l3, false);
break;
}
}
}).start();
}
答案 0 :(得分:1)
嗯...好奇....
首先,我不知道这个Painter类是什么。
if (j < 2)
很奇怪,因为我没有看到任何会从初始化值0改变它的东西。
“忽略了传感器的位置。”这可能是因为我在这里看不到任何可以访问手机传感器的东西。
此代码是否始终有效?我建议你找一些其他资源,比如这个:http://www.anddev.org/other-coding-problems-f5/android-compass-tutorial-t11674.html
<强>更新强>: 没有结束条件的for循环,最后只是休息一下?有什么意义呢?
“线程永远运行”不是我所看到的。您有while(true)
,但如果if (l3 < 0L)
小于零,l3 = l1 - l3;
将为真,因为l3
的值应高于l1
。它击中了中断,然后在for循环结束时触及中断,从而退出线程。
很难说你需要做什么,因为我真的不知道你在这里要做什么。