我正在使用API 10开发一个Android应用程序,我正面临一些问题。我的应用程序应该每30分钟发送一个UDP数据包到我的桌面监听服务器。我想做什么:
我的问题:
我不能使用startForeground(),因为我使用的是API lvl 10.它是在API 11中实现的。 申请不会留在后台。
我做了什么:
public class HeartbeatService extends Service{
@Override
public int onStartCommand(Intent intent, int flags, int startId) {
Log.e("er", "Started !");
TimerTask task = new TimerTask() {
@Override
public void run() {
Log.e("err", "NBOW !");
}
};
Timer timer = new Timer();
timer.schedule(task, 1000); // every 1 sec for testing
return super.onStartCommand(intent, flags, startId);
}
}
使用logcat我看到只有2行生成“NBOW!”应用程序打开。
我该怎么办?
public MyActivity extends Activity{
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_main);
startService(new Intent(this, HeartbeatService.class));
}
}
答案 0 :(得分:4)
我不能使用startForeground(),因为我使用的是API lvl 10.它是在API 11中实现的。
startForeground()
was added in API Level 5
我的应用程序应该每隔30分钟将一个UDP数据包发送到我的桌面监听服务器。
使用AlarmManager
和IntentService
,可能是my WakefulIntentService
。您不仅不需要始终保持服务运行只是为了每30分钟获得一次控制权,但这样做会浪费并增加用户采取措施阻止您的应用运行的可能性
如果设备重新启动,则自动启动服务
使用BOOT_COMPLETED
BroadcastReceiver
重新安排AlarmManager
次活动。
我做了什么
这不仅要求您浪费用户的RAM来观看时钟滴答,但如果设备处于睡眠模式(根据您的要求可能会或可能不会出现问题),它将无法工作。