我有一个应用程序,可以从数据库中获取用户的消息,如果有新消息它会推送通知我使用的服务...当应用程序打开或在前台时服务正常工作..但是当我关闭它它不起作用..它没有被破坏或停止它没有工作:SI不知道为什么..这是我的服务代码:
public class BGService extends Service {
ArrayList<Message> messages = new ArrayList<Message>();
ArrayList<String> requests = new ArrayList<String>();
Timer timer = new Timer();
Timer timer2 = new Timer();
@Override
public IBinder onBind(Intent intent) {
// TODO Auto-generated method stub
return null;
}
@Override
public void onDestroy() {
Log.d("Chat", "BGService Destroyed");
timer.cancel();
timer.purge();
timer2.cancel();
timer2.purge();
}
@SuppressWarnings("unchecked")
@Override
public void onStart(Intent intent, int startId) {
Log.d("Chat", "BGService Started");
messages = (ArrayList<Message>) intent.getExtras().get("messages");
requests = (ArrayList<String>) intent.getExtras().get("requests");
Log.d("Button Clicked", "Messages: " + messages);
new Timer().scheduleAtFixedRate(new TimerTask() {
public void run() {
Log.d("Service", "Running");
}
}, 2000, 2000);
}
}
答案 0 :(得分:0)
您告诉服务停止在您的代码中。因为你使用onBind()它似乎是你没有启动服务而是反过来。如果绑定到服务,则服务会在活动结束时自动结束。
如果您想让服务继续运行。
启动服务,这样你就可以在onStartCommand()中返回startsticky来告诉你想要坚持的操作系统
@Override
public int onStartCommand(Intent intent, int flags, int startId) {
return Service.START_STICKY;
}
开始服务。仅当您具有与服务来回通信的连接时才绑定到服务。这是从onBind()
返回的startService(new Intent(context, ServiceLocationRecorder.class));
// bind to the service
if (!mIsBound) {
// Bind to the service
bindService(new Intent(context,
ServiceLocationRecorder.class), mConnection,
Context.BIND_AUTO_CREATE);
mIsBound = true;
}
绑定到服务用于设置可与服务进行通信的绑定程序处理程序。在onBind()中返回null会违反onBind()事件的目的,因此您可以跳过此代码。
/**
* When binding to the service, we return an interface to our messenger for
* sending messages to the service.
*/
@Override
public IBinder onBind(Intent intent) {
return mMessenger.getBinder();
}
将服务设置为您执行此操作的前台,并且操作系统不太可能结束您的服务以获取另一个应用程序的内存。
//this is done inside the service
startForeground(R.id.action_record, getMyCustomNotification());
在自己的流程中运行服务,然后GC将能够收集您的活动并保持服务正常运行。
<service
android:name="com.example.service"
android:process=":myseparateprocess" >s -->
</service>