2016-06-19 7 views
1

30秒ごとに更新される画像を作る方法は?30秒ごとに更新される画像を作る方法は?

ImageView imageView = (ImageView) findViewById(R.id.imageView); 
Picasso.with(this).load("http://i.imgur.com/DvpvklR.png").memoryPolicy(MemoryPolicy.NO_CACHE).networkPolicy(NetworkPolicy.NO_CACHE).into(imageView); 
+1

TimerTaskをhttps://examples.javacodegeeks.com/android/core/activity/android-timertask-example/ – NickF

答えて

0

これを行うにはスレッドのようなものを使いたいと思うでしょう。たとえば、あなたのイメージ図下の

Runnable imageUpdater = new Runnable() { 
    @Override 
    public void run() { 
     while (true) { 
      try { 
       sleep(30000); // 30 seconds in milliseconds 
      } catch(InterruptedException e) { 
       // Someone called thread.interrupt() and tried 
       // to stop the thread executing 
       return; 
      } 

      // Here load the image in the same way as above: 
      // But you will need to go onto the UI thread first. 
      image.post(new Runnable() { 
       public void run() { 
        Picasso.with(YourActivity.this).load("http://i.imgur.com/DvpvklR.png").memoryPolicy(MemoryPolicy.NO_CACHE).networkPolicy(NetworkPolicy.NO_CACHE).into(imageView); 
       } 
      }); 
     } 
    } 
}; 

次に、あなただけの実行可能を開始します。

Handler handler = new Handler(); 
handler.post(imageUpdater); 
+0

スレッドがハンドラを使用するために、アンドロイドで推奨より良いされていない使用してみてくださいまたはTimerTask。 – Neo

+0

@ Neo、代わりにハンドラを使用するように更新されました。 Androidはスレッドを不利にするのは何ですか? – jcw

+0

TimerTaskを使用すること、またはhanlderを呼び出すことを推奨します。スレッドはアクティビティライフサイクルに接続されておらず、管理が難しいため、直接スレッドを停止することはできません。タイマータスクを使用している場合は、簡単に停止できます。また、ハンドラを使用した場合の最善のことは、ライフサイクルを考える必要がないことです。アクティビティが終了すると、自分自身が停止します。 – Neo

0
String[] imageLink = {http://i.imgur.com/DvpvklR.png, 
           http://i.imgur.com/DvpvklR.png, http://i.imgur.com/DvpvklR.png}; 

    int position = 0; 

    new Timer().scheduleAtFixedRate(new TimerTask() { 
      @Override 
      public void run() { 
       runOnUiThread(runnable);  
      } 
     }, 30 * 1000, 30*1000); 

    Runnable runnable = new Runnable() { 
     @Override 
     public void run() { 
      Picasso.with(this).load(imageLink[position%imageLink.length]).memoryPolicy(MemoryPolicy.NO_CACHE).networkPolicy(NetworkPolicy.NO_CACHE).into(imageView); 
      position++; 
     } 
    }; 

は、上記のコードはあなたを助けることを願っています:)

0

簡単な方法は、Handlerオブジェクトで実行する1つのRunnableインスタンスをスケジュールすることです。以下のコードでは、ActivityをRunnbleに拡張し、Handleのメソッドpostを呼び出して実行を開始し、メソッドpostDelayedを実行して繰り返します。 不要な実行を避けるために、onStopメソッドがハンドラを停止しました。

https://developer.android.com/reference/android/os/Handler.html

public class MainActivity extends Activity implements Runnable{ 

    private static final int DELAY = 30000; 
    Handler h; 
    @Override 
    protected void onCreate(Bundle savedInstanceState) { 
     super.onCreate(savedInstanceState); 
     setContentView(R.layout.your_layout); 
     ImageView imageView = (ImageView) findViewById(R.id.imageView); 
     h = new Handler(); 
     h.post(this); 

    } 

    @Override 
    public void run() { 
     Picasso.with(this).load("your_url").memoryPolicy(MemoryPolicy.NO_CACHE).networkPolicy(NetworkPolicy.NO_CACHE).into(imageView); 
     h.postDelayed(this, DELAY); 
    } 

    @Override 
    protected void onStop() { 
     super.onStop(); 
     h.removeCallbacksAndMessages(null);//cancel the repeat execution 
    } 
} 
関連する問題