我有一种奇怪的情况,即创建的服务正在停止 - 有时候。我有一个使用bindService
启动服务的条目活动A.// if we now have an IP address then bind ourselves to the MessageService
bindService(new Intent(this, MessagingService.class),
onMessageService,
BIND_AUTO_CREATE);
MessageService处理读取和发送线程的操作以处理与应用程序的消息流量。它基本上使用StatusTask以1秒的间隔处理新消息的轮询,并使用timer.scheduleAtFixedRate来计时。
活动A然后启动另一个向用户显示信息的活动B.出于某种原因,我还没弄清楚,大部分时间我按下主页按钮,轮询停止,服务似乎停止了。从Home最近的应用列表中重新选择我的应用,或者通过我在不可见时发布的通知将活动带到前台,但服务似乎已经消失。使调试变得更加困难,大约10-20%的时间一切正常,消息轮询服务一直在消失。
我应该使用startService吗?第二个Activity B与Service之间唯一的直接关系是将自身注册为Read线程的观察者,以便获得有关Reads超时的通知。我没有在我的代码中的任何地方调用stopService。
答案 0 :(得分:1)
如果使用eclipse开发--->试试这个将在菜单栏的Perspective选项中的DDMS --->选择Logcat,在运行应用程序时,只需尝试重复上面提到的顺序,然后按下主页按钮,只要查看该实例中的错误是什么,并发布错误,以便了解具体原因
此致 Mistry Hardik
答案 1 :(得分:1)
使用bbindService
启动服务会使服务生命周期与绑定活动相关联。一旦您的活动从服务中解除绑定,服务就会终止。
答案 2 :(得分:1)
公共类Testservice扩展了服务{
private static final String TAG = Testservice.class.getSimpleName();
公共定时器计时器; TimerTask scanTask; final Handler handler = new Handler(); 定时器t =新定时器();
@Override
public IBinder onBind(Intent intent) {
return null;
}
@Override
public void onCreate() {
super.onCreate();
Log.i(TAG, "Service creating");
_startService();
}
@Override
public void onDestroy() {
super.onDestroy();
Log.i(TAG, "Service destroying");
t.cancel();
t = null;
}
public void yourfunction() {
}
//这将在每秒基础上调用该函数,所以如果它有帮助就试试吧 public void _startService(){
scanTask = new TimerTask() {
public void run() {
handler.post(new Runnable() {
public void run() {
yourfunction();
}
});
}};
t.schedule(scanTask, 1000L, 1000L);
}
答案 3 :(得分:0)
一个简单的服务演示类
import android.app.Activity; import android.content.Intent; import android.os.Bundle; import android.util.Log; import android.view.View; import android.view.View.OnClickListener; import android.widget.Button;
公共类ServicesDemo扩展了Activity实现OnClickListener {
private static final String TAG = "AlertService";
Button buttonStart, buttonStop;
@覆盖 public void onCreate(Bundle savedInstanceState){ super.onCreate(savedInstanceState); 的setContentView(R.layout.servicedemo);
buttonStart = (Button) findViewById(R.id.btnStart);
buttonStop = (Button) findViewById(R.id.btnStop);
buttonStart.setOnClickListener(this);
buttonStop.setOnClickListener(this);
}
public void onClick(View src){ switch(src.getId()){ case R.id.btnStart: Log.d(TAG,“onClick:starting srvice”); startService(new Intent(this,Testservice.class)); 打破; 案例R.id.btnStop: Log.d(TAG,“onClick:停止srvice”); stopService(new Intent(this,Testservice.class)); 打破; } } }