为什么不调用onServiceConnected?

时间:2010-09-25 03:17:39

标签: android

我是一名初学者,他制作了一个简单的程序来展示服务的运作方式。

.....
toStartService = new Intent(this, SimpleService.class);
    sc = new ServiceConnection() {            
        @Override
        public void onServiceConnected(ComponentName name, IBinder service) {
            Toast.makeText(MoreService.this, "SC: Binded", Toast.LENGTH_SHORT).show();
        }

        @Override
        public void onServiceDisconnected(ComponentName name) {
            Toast.makeText(MoreService.this, "SC: Unbinded", Toast.LENGTH_SHORT).show();
        }    
    };


    startService.setOnClickListener(new View.OnClickListener() {
        @Override
        public void onClick(View v) {
            Toast.makeText(MoreService.this, "Starting Service", Toast.LENGTH_SHORT).show();
            startService(toStartService);        
        }
    });

    stopService.setOnClickListener(new View.OnClickListener() {
        @Override
        public void onClick(View v) {
            stopService(toStartService);
        }
    });

    bindService.setOnClickListener(new View.OnClickListener() {
        @Override
        public void onClick(View v) {
            if((isBound = bindService(toStartService, sc, BIND_AUTO_CREATE))) {

            }
        }
    });

    unbindService.setOnClickListener(new View.OnClickListener() {
        @Override
        public void onClick(View v) {
            if(isBound) {
                unbindService(sc);
                isBound = false;
            }
        }
    });

}

为什么没有传递sc变量(在bindService()上)调用sc.onServiceConnected()方法? 代码怎么了?

我遇到以下情况:

  • 当我按[startService]时 服务开始很好,然后 [stopService]服务停止运行。

  • 当我按[startService]时,[bindService]什么都不做,[unbindService]都没有。

  • 当我按[bindService]时,它创建了服务,[stopService]没有工作。我按[unbindService]服务正在调用onDestroy()方法。

为什么bindService创建的服务在解除绑定时会被销毁?我尝试使用startService启动服务,但它无法绑定。

Arrgh帮助我,对不起,如果我错了。

1 个答案:

答案 0 :(得分:2)

这是所有这些方法的设计行为。例如,在根据the documentationbindService(Intent service, ServiceConnection conn, int flags)方法中,只要存在调用上下文,服务才会运行:

  

只要存在调用上下文,系统就会认为该服务是必需的。例如,如果此Context是停止的Activity,则在恢复活动之前,不需要该服务继续运行。

对于unbindService (ServiceConnection conn)文档说:

  

断开与应用程序服务的连接。服务重新启动后,您将不再接听电话,现在可以随时停止服务。

startService (Intent service) documentation中说:

  

使用startService()会覆盖由bindService(Intent, ServiceConnection, int)管理的默认服务生命周期:它要求服务在调用stopService(Intent)之前保持运行,无论是否有任何客户端连接到它。请注意,startService()的来电不会嵌套:无论您拨打startService()多少次,只需拨打一次stopService(Intent)即可停止拨打电话。