Android服务停止而不被告知?

时间:2010-11-07 19:15:38

标签: android service

我有一种奇怪的情况,即创建的服务正在停止 - 有时候。我有一个使用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。

4 个答案:

答案 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));       打破;     }   } }