現在外部の別アプリからブロードキャストを受けて、画像を表示するアプリを作っています。
メインではまず、起動されたら初期設定の画像を順番にスライドさせています。
外部からブロードキャストを受けたら、そのデータからIDを取り出して、そのリストに合う画像のリストを切り替えて、またスライド(Animetor使用)させたいです。
一応ブロードキャスト無視して良いのであれば問題なくスライドショーしています。
毎秒ブロードキャストをチェックして、受けたらすぐに切り替えられるようにしたいので下記のコードを見よう見まねで書いたのですが、
いざテストしてみると切り替わるものの、内部でカウントさせている [int Count = 0;] フラグが次々に書き換わり、表示させている画像が重なったり、高速で入れ替わる、画像がスライドしなくなる、などうまく行きません。
●気になっている点1
このスライドショーはアニメーションが終わることを検知して画像を入れ替える(画像同士が再生し合う)仕組みで永久ループになっているのが問題なのでは??と思っています。
●気になっている点2
Countが高速で切り替わっているところをを考えると、それぞれのスレッドでCountを利用しているために起こっている現象なのでは??と考えています。つまり、スレッドセーフになっていない??(言葉の使い方が合っているのか自信がありませんが)
他に探り方が思いつかないため、ざっくりとしたコードで申し訳ありませんが何か心当たりがありましたら教えて頂けると嬉しいです。
できる範囲で他のコードも載せます。
よろしくお願いします。
java
1// グローバル変数 リストから画像を順番に取り出すために使用中 2// アニメーションスタート時(スライド開始時)にカウントを増やしています。 3int Count = 0; 4 5 6 public void CheckBroadManager(){ 7 //1秒ごと 8 int time = 1000; 9 Timer timer = new Timer(); 10 11 timer.schedule(new TimerTask() { 12 @Override 13 public void run() { 14 SimpleDateFormat sdf = new SimpleDateFormat("yyyyMMddHHmmss"); 15 Long NowUnixTime = getNowDateStr();//現在の時刻を取得するメソッド 16 17 // Broadcastを受けているかどうか判定 18 if(BroadcastData != null){ 19 try { 20 long BroadFaceUnixTime = sdf.parse(BroadFaceData[3]).getTime()/1000L; //ブロードキャストされたデータから時刻を抜いてます 21 if((NowUnixTime - BroadFaceUnixTime) < 2){ // ブロードキャストのデータと現在の時差が0~2くらいの間であれば下記の操作をしたい 22 if(!switchFlag) { 23 handler.post(new Runnable() { 24 @Override 25 public void run() { 26 frameLayout.removeAllViews(); // メインのviewを全て削除 27 initialSetView("あるリストを読み込んで画像をセットする自作メソッドです"); 28 usuFlag = false; //フラグを立ててチェック 29 switchFlag = true; //フラグを立ててチェック 30 } 31 }); 32 } 33 }else{ 34 if (!usuFlag) { 35 handler.post(new Runnable() { 36 @Override 37 public void run() { 38 frameLayout.removeAllViews(); メインのviewを全て削除 39 initialSetView("あるリストを読み込んで画像をセットする自作メソッドです"); 40 usuFlag = true; //フラグを立ててチェック 41 switchFlag = false; //フラグを立ててチェック 42 } 43 }); 44 } 45 } 46 } catch (ParseException e) { 47 e.printStackTrace(); 48 } 49 } 50 } 51 }, 0, time); 52 }
回答1件
あなたの回答
tips
プレビュー
バッドをするには、ログインかつ
こちらの条件を満たす必要があります。