###前提・実現したいこと
SurfaceViewを用いてUIスレッドと非同期の描画処理を行おうとしています。
そんな中で、以下の問題が発生しました。
###発生している問題・エラーメッセージ
エラーメッセージはありません。
変数が変わっているはずなのに反映されないです。
具体的には、privateな変数を用意して、Activityクラスから随時setで値を受け取りそれを反映させるというものなのですが、以前のUIスレッドに対して同期の処理をさせていたものから非同期のものに書き換えると変数が反映されなくなりました。
###修正していく中で新たに出た問題(追記)
SurfaceViewの記事を見て描画メソッドをrun()に、holderを渡さないように変えました(下のコードでholderを受け渡ししているのが古いもの)。すると、描画されなくなりました。run()はpublicです。
###該当のソースコード
Threadを使用している部分を抜粋しました。
java
1@Override 2 public void surfaceCreated(SurfaceHolder holder) { 3 isSurfaceStanby = true; 4 //test 5 thread = new Thread(); 6 thread.start(); 7 //test 8 //doDraw(holder);///test 9 }
java
1public void todraw() { 2 while (thread != null) {///test 3 doDraw(getHolder());///test 4 }///test 5 //test 6 try { 7 Thread.sleep(50); 8 }catch (Exception e){} 9 //test 10 }
・追記分
java
1 public C(Context context) { 2 super(context); 3 holder = getHolder(); 4 init(); 5 } 6 public C(Context context, AttributeSet attrs) { 7 super(context, attrs); 8 holder = getHolder(); 9 init(); 10 } 11 public C(Context context, AttributeSet attrs, int defStyleAttr) { 12 super(context, attrs, defStyleAttr); 13 holder = getHolder(); 14 init(); 15 } 16 public C(Context context, AttributeSet attrs, int defStyleAttr, int defStyleRes) { 17 super(context, attrs, defStyleAttr, defStyleRes); 18 holder = getHolder(); 19 init(); 20 }
java
1public void run() { 2 Canvas canvas; 3 while (thread != null) { 4 //描画処理 5 try { 6 Thread.sleep(100); 7 }catch (Exception e) { 8 } 9 } 10}
Java
1@Override 2 public void surfaceCreated(SurfaceHolder holder) { 3 isSurfaceStanby = true; 4 //test 5 thread = new Thread(); 6 thread.start(); 7 //test 8 }
###試したこと
引数で値を渡したり、getを使ったりしてみたのですが結果は同じでした。
###補足情報
同時に加速度センサーを使用しているのですが、センサー精度が変化するときに呼ばれるonAccuracyChangedが常に呼び出される不具合が発生しています。
※上記の不具合は追記時の書き方を変えることによってなくなりました。
//testの記述は目印です、特に今回の質問とは関係ありません。
回答1件
あなたの回答
tips
プレビュー
バッドをするには、ログインかつ
こちらの条件を満たす必要があります。
2017/05/27 09:57 編集