无法从MainActivity调用服务方法

时间:2015-12-03 06:25:07

标签: android service

我有一个具有各种方法的服务,他们所做的只是提供一个logcat消息,但是即使我在我的activity类中创建了该服务的实例,这些方法似乎也没有被调用。登记/> 我的服务类代码是 -

public class service extends Service {
IBinder ob=new My_Ibinder();


public class My_Ibinder extends Binder{
    public service get_MyService(){
        return service.this;
    }

  }


@Override
public void onCreate() {
    super.onCreate();
Log.e("SERVICE CREATED","");

}

@Override
public int onStartCommand(Intent intent, int flags, int startId) {
    Log.e("SERVICE OnStartCommand","");
    return super.onStartCommand(intent, flags, startId);
}

@Override
    public IBinder onBind(Intent intent) {
        Log.e("SERVICE onBind","");
        return ob;
    }


    @Override
    public void onDestroy() {
        super.onDestroy();
        Log.e("SERVICE DESTROYED","");
    }

    String data(){
        Log.e("SERVICE data method","");

        return "DATA SUCCESSFULLY TRANSFERRED";
    }

    public void ok(){
        Log.e("SERVICE ok method","");
    }


}

这里我调用的方法是data()和ok()。
我的活动类是 -

Button start,stop,data,check;
    TextView tv;
    service ser;
    Boolean flag=false;


protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.activity_main);
        start=(Button)findViewById(R.id.start);
        check=(Button)findViewById(R.id.check);
        stop=(Button)findViewById(R.id.stop);
        data=(Button)findViewById(R.id.data);
        tv=(TextView)findViewById(R.id.tv);

        start.setOnClickListener(new OnClickListener(){public void onClick(View v){ bindService(new Intent(MainActivity.this,service.class),sc,Context.BIND_AUTO_CREATE);  }});
        stop.setOnClickListener(new OnClickListener(){public void onClick(View v){    unbindService(sc);  flag=false;    }});
        data.setOnClickListener(new OnClickListener(){public void onClick(View v){    ser.ok();tv.setText(ser.data());      }});
        check.setOnClickListener(new OnClickListener(){public void onClick(View v){     Log.e(""+flag,"sfsfsdfdssfsdffsdfs");     }});

    }


    private ServiceConnection sc=new ServiceConnection(){

        @Override
        public void onServiceConnected(ComponentName name, IBinder service) {
            My_Ibinder ob=(My_Ibinder)service;
            ser=ob.get_MyService();
            flag=true;
        }

        @Override
        public void onServiceDisconnected(ComponentName name) {
            flag=false;
            ser=null;
        }

    };


单击按钮我没有收到任何logcat消息。无论是我需要调用的方法,还是来​​自onCreate(),onBind()和onDestroy()方法,如果成功创建了服务,它们应该被调用。

我已经检查了设置中的运行进程,并且该服务在那里不存在。
奇怪的是,如果我用startService(intent)启动服务,那么它似乎工作正常(虽然我无法与之通信它)。我猜绑定服务有一些问题 请帮助。

2 个答案:

答案 0 :(得分:1)

终于明白了......我做过这么愚蠢的愚蠢错误。在给logcat消息时,我没有添加文本属性,它只有一个标签。现在我已经添加了一个文本,它完美无缺。这个小而重要的要点需要注意。当然我们都使用logcat消息来调试我们的程序,但这次PROBLEM本身就是LOGCAT。永远不会忘记这一个!!!

答案 1 :(得分:0)