2013-10-26 106 views
3

我是C++開發人員,正在開發我的第一個Android應用程序。我的應用程序是一種特殊的提醒。我正在尋找最好的方式來做到這一點。我曾嘗試這個辦法:AlarmManager或服務

  1. 使用服務
  2. 使用的AlarmManager

我的問題是,我可以用AlarmManager單?考慮到我的AlarmManager應該每隔1秒觸發一次,是否會耗費CPU時間? (似乎每次執行一個AlarmManager時,除主進程以外的新進程都會被創建並立即被終止)。

如果我使用服務,那麼我的應用程序應該始終保留在內存中,如果被用戶殺死會發生什麼情況!

Android如何報警(默認安裝的應用程序)的工作原理?

任何幫助,將不勝感激。

回答

6

使用返回START_STICKY並將其設置爲startForeground的服務,這樣,即使系統在一段時間後將其資源關閉並重新正常運行,您的應用程序也會一直運行,並且用戶將其很好地殺死這是甚至是大的應用程序抱怨,就像你在第一次安裝whatsapp時看到的那樣。這裏的服務應該是怎麼樣的一個例子:

public class Yourservice extends Service{ 

@Override 
public void onCreate() { 
    super.onCreate(); 
    // Oncreat called one time and used for general declarations like registering a broadcast receiver 
} 

@Override 
public int onStartCommand(Intent intent, int flags, int startId) { 

    super.onStartCommand(intent, flags, startId); 

// here to show that your service is running foreground  
mNotificationManager = (NotificationManager) getSystemService(NOTIFICATION_SERVICE); 
    Intent bIntent = new Intent(this, Main.class);  
    PendingIntent pbIntent = PendingIntent.getActivity(this, 0 , bIntent, Intent.FLAG_ACTIVITY_CLEAR_TOP); 
    NotificationCompat.Builder bBuilder = 
      new NotificationCompat.Builder(this) 
       .setSmallIcon(R.drawable.ic_launcher) 
       .setContentTitle("title") 
       .setContentText("sub title") 
       .setAutoCancel(true) 
       .setOngoing(true) 
       .setContentIntent(pbIntent); 
    barNotif = bBuilder.build(); 
    this.startForeground(1, barNotif); 

// here the body of your service where you can arrange your reminders and send alerts 
    return START_STICKY; 
} 

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

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

這是一個持續的服務以執行代碼的最佳配方。

+0

感謝您的回覆,我會研究/檢查它。 –