2016-03-28 20 views
0

içinde her bir saniye Log zorunda basit hizmeti yarattı. Alarmın yöneticisi kullanılan (official document diyor için Note: The Alarm Manager is intended for cases where you want to have your application code run at a specific time, even if your application is not currently running.) ama rasgele tekrarlanan. İşte FAB butonuna tıklayarak hizmetini başlatmak kodumAlarm Yöneticisi tekrar Service

MainActiviry.class

public class MainActivity extends AppCompatActivity { 

    @Override 
    protected void onCreate(Bundle savedInstanceState) { 
     super.onCreate(savedInstanceState); 
     setContentView(R.layout.activity_main); 
     Toolbar toolbar = (Toolbar) findViewById(R.id.toolbar); 
     setSupportActionBar(toolbar); 

     FloatingActionButton fab = (FloatingActionButton) findViewById(R.id.fab); 
     if (fab != null) { 
      fab.setOnClickListener(new View.OnClickListener() { 
       @Override 
       public void onClick(View view) { 
        Intent intent = new Intent(MainActivity.this,LogService.class); 
        startService(intent); 
       } 
      }); 
     } 
    } 

    @Override 
    public boolean onCreateOptionsMenu(Menu menu) { 
     // Inflate the menu; this adds items to the action bar if it is present. 
     getMenuInflater().inflate(R.menu.menu_main, menu); 
     return true; 
    } 

    @Override 
    public boolean onOptionsItemSelected(MenuItem item) { 
     // Handle action bar item clicks here. The action bar will 
     // automatically handle clicks on the Home/Up button, so long 
     // as you specify a parent activity in AndroidManifest.xml. 
     int id = item.getItemId(); 

     //noinspection SimplifiableIfStatement 
     if (id == R.id.action_settings) { 
      return true; 
     } 

     return super.onOptionsItemSelected(item); 
    } 
} 

olduğunu. LogService.class

public class LogService extends Service { 
    private static final String TAG = LogService.class.getSimpleName(); 

    public LogService() { 
     super(); 
    } 

    @Override 
    public int onStartCommand(Intent intent, int flags, int startId) { 
     Log.e(TAG, "onStartCommand: Service calling"); 

     return super.onStartCommand(intent, flags, startId); 
    } 


    @Override 
    public void onDestroy() { 
     super.onDestroy(); 
    } 

    @Override 
    public void onCreate() { 
     Timer(this); 
     super.onCreate(); 
    } 

    @Nullable 
    @Override 
    public IBinder onBind(Intent intent) { 
     return null; 
    } 

    private void Timer(Context context){ 
     Intent intent = new Intent(context,LogService.class); 
     PendingIntent pendingIntent = PendingIntent.getService(context,0,intent,0); 
     AlarmManager alarmManager = (AlarmManager) getApplicationContext().getSystemService(getApplicationContext().ALARM_SERVICE); 
     alarmManager.setRepeating(alarmManager.RTC_WAKEUP,System.currentTimeMillis(),1*1000,pendingIntent); 
    } 
} 

İşte benim LOG

Logcat

O her dakika tekrar, ama her saniye yazma. Yanlış mı yazarım?

cevap

0

yana API 19 tekrarlayarak alarmlar hatalı bulunmaktadır. Bkz .:

Not: API 19'dan itibaren, tüm yinelenen alarmlar geçersizdir. Uygulamanızın kesin teslimat süresine ihtiyacı varsa, o zaman yukarıda tarif edildiği şekilde her seferinde bir defaya mahsus tarifleri yeniden programlamak zorundadır. TargetSdkVersion öğesi API 19'dan daha eski olan eski uygulamalar, alarmların yinelenmesi de dahil olmak üzere tüm alarmlarına tam olarak sahip olmaya devam edecektir.

Sen 19 den senin targetSdkVersion düşük bir değere ayarlamak veya tek seferlik tam alarmları kullanmak ve onları her zaman yeniden ayarlamak gerekir.

Bu

java.util.Timer

Timer timer = new Timer(); 
      timer.scheduleAtFixedRate(new TimerTask() { 

       @Override 
       public void run() { 
        //Put your code here 
        Log.d("Log", "Hello World"); 
       } 
      }, 0, 1000); 
+0

ama [resmi belgeler] (http://developer.android.com/reference/android/app/AlarmManager.html) 'diyor ile official documentation

Basit bir çözümdür Not: Alarm Yöneticisi belirli bir zamanda uygulama kodu çalıştırmak isteyen durumlar için tasarlanmıştır, başvurunuz şu anda değil running.' bile, bir kerelik kesin alarmlar için örnek gösterebiliriz yüzden, kullandı? – Kathi

+0

Sadece basit bir zamanlayıcısını saniyede bir şeyler yapmak istiyorsanız, java Timer sınıfını da kullanabilirsiniz. Başka bir çözüm Basit işleyicisi kullanacak sayesinde alarm yöneticisi ile bunu başarmak için şansı var mı, gerçekten – Erich

+0

yah yapmak istediğinize bağlıdır, Eylemciler nelerdir? – Kathi