我想在android中间隔一段时间后调用一个线程

时间:2014-12-12 20:55:20

标签: android

我想在5或10分钟的时间间隔之后调用android活动中的一个线程。之后,我想在Android中发送自动短信,任何号码。请帮我。我已经了解了我们可以用这个做的线程,但是这个函数的问题是,它一遍又一遍地调用。提前致谢

它就是那个代码。但它曾经调用过,然后反复发送短信,直到我们停止申请。请帮帮我。

Thread timer = new Thread() 
        {
            @Override
            public void run() 
            {
                try 
                {

                    sleep(1000*60*2);

                } 
                catch (InterruptedException ex) 
                {
                    ex.printStackTrace();
                } 
                finally 
                {
                    String phone_number = "123456789"; // some phone number here
                    String text = 
                            "Hello this is an automatic SMS service informing you about the current status: \n" +
                            " City :" +cityName +"\n"
                            +"State :"     +stateName+"\n"
                            +"Country :"   +countryName +"\n";

                    SmsManager smsMgr = SmsManager.getDefault();
                    smsMgr.sendTextMessage(phone_number, "Hussnain Muavia", text, null, null);
                    txtLat.setText("SMS Sent");

                }
            }
        };
        timer.start();  

3 个答案:

答案 0 :(得分:0)

我会使用带TimerTask的Timer:

TimerTask myTimerTask = new TimerTask() {

    public void run() {
    //do your code here
    }
};

Timer myTimer = new Timer();

myTimer.schedule(myTimerTask, when you want to start?[im milliseconds for example], 300000[5mins]);

如果您不想再次执行TimerTask,只需调用即可。 myTimer.cancel();

注意请勿忘记在myTimer.cancel();中拨打onPause,否则定时器将继续执行并且这会耗尽电量!

有关您的评论的更新 myTimer.schedule可以采用各种参数。对你有意思的是:

myTimer.schedule(Runnable r, When to first execute, In which Interval);

Runnable r是你的TimerTask,它将在之后执行 When to first execute已过期。如果你想立即开始,只需传递0即可。 In which Interval如果你输入50,那么你的TimerTask将在When to first execute到期后每50ms执行一次。

这应该可以解决问题。

希望它有所帮助! ;)

答案 1 :(得分:0)

以Android方式执行。使用AlarmManager设置重复操作,然后创建自定义BroadcastReceiver以执行特定操作。这是example如何实现的。它更复杂,但它更可靠,更安全自然。

答案 2 :(得分:0)

您想使用AlarmManager,这是Android的方式。其他一切你都会遇到麻烦。不要使用Handler.postDelayed,因为如果Looper在计时器启动之前退出,将会删除回调:

  

如果Runnable已成功放入消息队列,则返回true。失败时返回false,通常是因为处理消息队列的looper正在退出。请注意,结果为true并不意味着将处理Runnable - 如果在消息发送时间之前退出looper,则消息将被删除

轻松创建闹钟。

AlarmManager am = (AlarmManager)context.getSystemService(Context.ALARM_SERVICE);
Intent i = new Intent(context, Alarm.class);
PendingIntent pi = PendingIntent.getBroadcast(context, 0, i, 0);
long FIVE_MINS_IN_MILLIS = 1000 * 60 * 5;
am.setRepeating(AlarmManager.RTC_WAKEUP, System.currentTimeMillis(), FIVE_MINS_IN_MILLIS , pi);