2014-07-04 58 views
0

我已經定義了REPEAT_TIME = 15 * 1000;,但消息在3秒左右顯示。 我的MainActivity:服務未按預定義時間間隔運行

public class MainActivity extends ListActivity { 
    private LocalWorldService s; 

    @Override 
    public void onCreate(Bundle savedInstanceState) { 
     super.onCreate(savedInstanceState); 
     setContentView(R.layout.activity_main); 
    } 

    @Override 
    protected void onResume() { 
     super.onResume(); 
     Intent intent = new Intent(this, LocalWorldService.class); 
     bindService(intent, mConnection, Context.BIND_AUTO_CREATE); 
    } 

    @Override 
    protected void onPause() { 
     super.onPause(); 
     unbindService(mConnection); 
    } 

    private ServiceConnection mConnection = new ServiceConnection() { 

     public void onServiceConnected(ComponentName className, IBinder binder) { 
      LocalWorldService.MyBinder b = (LocalWorldService.MyBinder) binder; 
      s = b.getService(); 
      Toast.makeText(MainActivity.this, "Connected", Toast.LENGTH_SHORT) 
        .show(); 
     } 

     public void onServiceDisconnected(ComponentName className) { 
      s = null; 
      Toast.makeText(MainActivity.this, "Disconnected", Toast.LENGTH_SHORT) 
      .show(); 
     } 
    }; 

我的服務:

public class LocalWorldService extends Service { 

    private final IBinder mBinder = new MyBinder(); 
    private ArrayList<String> list = new ArrayList<String>(); 

    @Override 
    public int onStartCommand(Intent intent, int flags, int startId) { 
     // TODO Auto-generated method stub 
     system.out.println("Message"); 
     return Service.START_NOT_STICKY; 
    } 

@Override 
    public void onDestroy() { 
     // TODO Auto-generated method stub 
     super.onDestroy(); 
     System.out.println("On destroy used"); 
    } 

    @Override 
    public IBinder onBind(Intent arg0) { 
     // TODO Auto-generated method stub 
     return mBinder; 
    } 

    public class MyBinder extends Binder{ 
     LocalWorldService getService(){ 
      return LocalWorldService.this; 
     } 
    } 

    public List<String> getWordList(){ 
     return list; 
    } 

以下是兩個類廣播接收器:

public class MyScheduleReceiver extends BroadcastReceiver{ 

    private static final long REPEAT_TIME = 15 * 1000; 
    @Override 
    public void onReceive(Context context, Intent intent) { 
     // TODO Auto-generated method stub 
     AlarmManager service = (AlarmManager) context.getSystemService(Context.ALARM_SERVICE); 
     Intent i = new Intent(context, MyStartServiceReceiver.class); 
     PendingIntent pending = PendingIntent.getBroadcast(context, 0, i, PendingIntent.FLAG_CANCEL_CURRENT); 
     Calendar cal = Calendar.getInstance(); 
     cal.add(Calendar.SECOND, 15); 
     service.setInexactRepeating(AlarmManager.RTC_WAKEUP, cal.getTimeInMillis(), REPEAT_TIME, pending); 
    } 

和:

public class MyStartServiceReceiver extends BroadcastReceiver { 

    @Override 
    public void onReceive(Context context, Intent intent) { 
     // TODO Auto-generated method stub 
     Intent service = new Intent(context, LocalWorldService.class); 
     SharedPreferences pref = PreferenceManager 
       .getDefaultSharedPreferences(context); 
     Map<String, ?> x = pref.getAll(); 
     boolean momoMagnetIsOn = (Boolean) x.get("key_momo_magnet"); 
     if (momoMagnetIsOn){ 
      context.startService(service); 
     } 
     else{ 
      context.stopService(service); 
     } 
    } 

回答

0

好吧,我自己得到它。因爲我在下面this

我甚至不知道爲什麼要重新啓動系統。但是重新啓動系統改變了時間間隔。我以前用REPEAT_TIME = 3 * 1000重新啓動了手機,因此每3秒顯示一次信息。任何解釋都會受到歡迎。我是這個主題的新手。謝謝..

0

嗯,你有沒有注意到,您實際上告訴它是inexact?你應該使用setExact()

+0

是這樣的原因嗎?你讀過我自己的答案嗎? – Nabin