2015-06-10 29 views
-1

我正在閱讀很多關於volatile變量的論壇和教程,但仍然不適合我。我正在使用Java在Android studio中開發Android應用程序。在Java中使用volatile變量

我有主要的UI線程,並從那裏我使用Runnable創建另一個。 我需要在這兩個線程之間分配兩個變量。 UI線程更改這些變量,另一個線程讀取這些變量。

這是我的代碼片段。代碼不完整(不是所有關於傳感器的行 - bcs都能正常工作)。我只是不知道如何連接兩個線程中的x,y,UI中的更改將在另一個線程中可見。

感謝您的任何建議。

class MyThread implements Runnable { 

    public static volatile float x = 0; 
    public static volatile float y = 0; 
    GLSurfaceView mGLView; 

    public MyThread(float xPos, float yPos, GLSurfaceView GLView) { 
     x=xPos; 
     y=yPos; 
     mGLView = GLView; 
    } 

    public void run() { 
     while(true){ 
      ((MyGLSurfaceView)mGLView).mRenderer.ball.translateM(x, y, 0); 
     } 
    } 
} 


public class MainActivity extends Activity implements SensorEventListener { 

    private GLSurfaceView mGLView; 
    public static volatile float x = 0; 
    public static volatile float y = 0; 

    public void onCreate(Bundle savedInstanceState) { 
     r = new MyThread(x, y, mGLView); 
     new Thread(r).start(); 
    } 

    public void onSensorChanged(SensorEvent event) { 
     r.x = -(float)(event.values[2]/(1000*90.0)); 
     r.y = (float)(event.values[1]/(1000*180.0)); 
    } 
} 

回答

0

您應該聲明一對。

class Globals { 

    public static volatile float x = 0; 
    public static volatile float y = 0; 

} 

然後,您可以在任何地方進行修改:

public void onSensorChanged(SensorEvent event) { 
     Globals.x = -(float) (event.values[2]/(1000 * 90.0)); 
     Globals.y = (float) (event.values[1]/(1000 * 180.0)); 
    } 

這未必是很好的做法,我可能會宣佈一個可變Point類,並保持在一個單身,但至少你只是需要分享一個例子。

+0

這是一個複合操作 – xTrollxDudex