2016-01-23 116 views
0

總是具體的時間我想打電話給每5秒後一種方法,但它在應用程序啓動我怎麼能調用一個方法(循環),每次之後的Android

 super.onCreate(savedInstanceState); 
     setContentView(R.layout.activity_main); 
    Handler delayhandler = new Handler(); 
    Runnable run = new Runnable() { 
     @Override 
     public void run() { 
      loop(); 

     } 
    }; 
    delayhandler.postDelayed(run, 5000); 
    } 

    void loop(){ 

    Toast.makeText(MainActivity.this, "ooh", Toast.LENGTH_SHORT).show(); 
    } 
+0

您可以使用Alarm manager作爲 – Pankaj

+2

在要循環的方法中添加handler.postDelayed的代碼行,將其餘代碼保持原樣,它會自動運行 – user2450263

+0

@ user2450263您是否認爲public void run (){delayhandler.postDelayed(run,5000); } –

回答

1
Handler delayhandler = new Handler(); 
    Runnable run = new Runnable() { 
     @Override 
     public void run() { 
      loop(); 

     } 
    }; 
    delayhandler.postDelayed(run, 5000); 
    } 

    void loop(){ 
    Toast.makeText(MainActivity.this, "ooh", Toast.LENGTH_SHORT).show(); 
delayhandler.postDelayed(run, 5000); 
    } 
+0

Thnks很多,像一個魅力 –

+0

作品歡迎您,很高興提供幫助。請接受答案,在未回答列表中提出一個更少的問題:)。在你編寫代碼時,請考慮只做儘可能多的/絕對必要的事情,並且保持簡單,所有最好的 – user2450263

1

創建方法只運行一次:

public void setAlarm(Context context, int interva) { 
    alarmManager = (AlarmManager) context.getSystemService(Context.ALARM_SERVICE); 

    Intent i = new Intent(context, NotificationAlarm.class); 
    PendingIntent pi = PendingIntent.getBroadcast(context, 0, i, 0); 

    alarmManager.setRepeating(AlarmManager.RTC_WAKEUP, System.currentTimeMillis(), interva, pi); 
} 

然後創建類NotificationAlarm

public class NotificationAlarm extends BroadcastReceiver { 

    @Override 
    public void onReceive(Context context, Intent intent) { 
     loop(); 
    } 

    private void loop() { 
    //work 
    } 
} 

添加類AndroidManifest

<receiver android:name=".NotificationAlarm" /> 

調用方法的活動或服務

setAlarm(this,5000); 

爲cancelAlarm試試這個:

public void cancelAlarm(Context context) { 

    Intent intent = new Intent(context, NotificationAlarm.class); 
    PendingIntent pendingIntent = PendingIntent.getBroadcast(context, 0, intent, 0); 
    alarmManager = (AlarmManager) G.context.getSystemService(G.context.ALARM_SERVICE); 
    alarmManager.cancel(pendingIntent); 
} 
+0

是的我正在使用它來獲得通知 –

+0

,即使它會(假設更正,工作)完成要求的內容,但也是如此很多不必要的工作,不需要依賴性和廣播接收機和報警管理器的低效使用,來實現必要的。不推薦.. 只是說,所以你會知道它 – user2450263

+0

setAlarm(this,5000); 5000 =間隔 –

0

您可以使用定時器任務,作爲好喜歡這個,

private Timer timer; 
private TimerTask timerTask = new TimerTask() { 

    @Override 
    public void run() { 
     final Random random = new Random(); 
     int i = random.nextInt(2 - 0 + 1) + 0; 
     random_note.setImageResource(image[i]); 
    } 
}; 

public void start() { 
    if(timer != null) { 
     return; 
    } 
    timer = new Timer(); 
    timer.scheduleAtFixedRate(timerTask, 0, 2000); 
} 

public void stop() { 
    timer.cancel(); 
    timer = null; 
} 
相關問題