无法从MainActivity调用服务的方法
问题描述:
我有一个具有各种方法的服务,他们所做的只是给出一个logcat消息,但即使我已在该活动中创建了该服务的一个实例,这些方法似乎仍未被调用类。
我的服务类代码是 -
无法从MainActivity调用服务的方法
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","");
}
}
这里我所说的方法是数据()和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)启动服务,那么它似乎工作正常(虽然我无法与它通信)。我猜这个服务绑定存在一些问题。
请帮助。
答
终于明白了......这样一个愚蠢愚蠢的错误,我做了。虽然给logcat消息,我没有添加文本属性,它只是一个标签。现在我已经添加了一个文本,它完美的工作。这是一个小而重要的要点。当然,我们都使用logcat消息来DEBUG我们的程序,但这次问题是LOGCAT本身。永远不会忘记这一个!
答
+0
但是文档说,您可以使用任一种方法(binder或aidl)与活动进行通信。我发现粘合剂不那么复杂。你能告诉我在代码中我错了吗? –
您是否将服务放入您的清单中? –
是的,我已经添加了它 –