Java Android::所有活动的绑定服务
我想做一些像topic说的事情,但我不知道该怎么做 我可以为每个活动绑定服务,并调用服务方法或服务调用活动方法Java Android::所有活动的绑定服务,java,android,Java,Android,我想做一些像topic说的事情,但我不知道该怎么做 我可以为每个活动绑定服务,并调用服务方法或服务调用活动方法 public class Screen1 extends BaseActivity implements BaseActivity.onServiceAttached { @Override public void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState); La
public class Screen1 extends BaseActivity implements BaseActivity.onServiceAttached {
@Override
public void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
LayoutInflater inflater = (LayoutInflater) this.getSystemService(Context.LAYOUT_INFLATER_SERVICE);
View contentView = inflater.inflate(R.layout.main, null, false);
mDrawer.addView(contentView, 0);
setServiceAttachedListener(Screen1.this);
}
@Override
public void doServiceConnected() {
try {
mService.send("info","topic1/sensor1");
} catch (MqttException e) {
e.printStackTrace();
}
}
@Override
public void doServiceReturn(String act) {
if (act.equals("SCREEN1")) {
this.runOnUiThread(new Runnable() {
@Override
public void run() {
updateCurrentFragment();
}
});
}
}
这是一些变通办法。我使用IBinder方法在服务和活动之间进行沟通
@Override
protected void onStart() {
super.onStart();
mConnection = new ServiceConnection() {
@Override
public void onServiceConnected(ComponentName name, IBinder service) {
Toast.makeText(Screen1.this, "Service is connected", 1000).show();
mBounded = true;
MqttPushService.LocalBinder mLocalBinder = (MqttPushService.LocalBinder)service;
mService = mLocalBinder.getServerInstance();
mService.setServiceCallbacks(Screen1.this);
//get temp info
try {
mService.send("info","topic1/sensor1");
} catch (MqttException e) {
e.printStackTrace();
}
}
@Override
public void onServiceDisconnected(ComponentName name) {
Toast.makeText(Screen1.this, "Service is disconnected", 1000).show();
mBounded = false;
mService = null;
}
};
//Bind Service and Activity
Intent mIntent = new Intent(this,MqttPushService.class);
bindService(mIntent, mConnection, BIND_AUTO_CREATE);
}//END of onStart()
@Override
protected void onStop() {
super.onStop();
if(mBounded) {
mService.setServiceCallbacks(null); // unregister
unbindService(mConnection);
mBounded = false;
}
}//END of onStop()
然而,我不能一次将服务绑定到所有活动
我想用基本的活动课,但没有希望
我尝试在基类中实现绑定服务,并让其他人扩展这个基类服务
基类
当Screen1.class第一个活动设置回调方法时
调用服务方法并执行一些任务
倾听返回的结果并执行一些任务
在这个类中没有问题,但是当我使用intent和new screenselepmode.class时
这是类似于此类的实现,但service Log.d告诉我serviceCallBacks为空。
当服务想要调用活动方法时
public class Screen1 extends BaseActivity implements BaseActivity.onServiceAttached {
@Override
public void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
LayoutInflater inflater = (LayoutInflater) this.getSystemService(Context.LAYOUT_INFLATER_SERVICE);
View contentView = inflater.inflate(R.layout.main, null, false);
mDrawer.addView(contentView, 0);
setServiceAttachedListener(Screen1.this);
}
@Override
public void doServiceConnected() {
try {
mService.send("info","topic1/sensor1");
} catch (MqttException e) {
e.printStackTrace();
}
}
@Override
public void doServiceReturn(String act) {
if (act.equals("SCREEN1")) {
this.runOnUiThread(new Runnable() {
@Override
public void run() {
updateCurrentFragment();
}
});
}
}
}
最后
我的目标是将服务与所有活动绑定在一起。此外,服务和活动应该能够相互交谈。。有可能吗??请给我一些建议
注
我试图总结我的问题,但我不知道从哪里开始
我试着展示一些作品,想告诉大家发生了什么
很抱歉,这个问题有点长。首先,您的服务不是绑定到活动的服务,您的服务是执行某些操作的组件,而您的活动是绑定到服务以便从服务或其他内容获取数据的组件
因此,每次打开一个新活动时,您都需要绑定到您的服务,让一个基本活动在其onCreate中绑定到服务的方法非常好
然后,您可以拥有服务实现的接口,这样您就可以与您的服务进行通信,还可以拥有一些回调,这样当您的服务需要与活动进行通信时,您的活动就会得到通知
@Override
protected void onStart() {
super.onStart();
mConnection = new ServiceConnection() {
@Override
public void onServiceConnected(ComponentName name, IBinder service) {
Toast.makeText(Screen1.this, "Service is connected", 1000).show();
mBounded = true;
MqttPushService.LocalBinder mLocalBinder = (MqttPushService.LocalBinder)service;
mService = mLocalBinder.getServerInstance();
mService.setServiceCallbacks(Screen1.this);
//get temp info
try {
mService.send("info","topic1/sensor1");
} catch (MqttException e) {
e.printStackTrace();
}
}
@Override
public void onServiceDisconnected(ComponentName name) {
Toast.makeText(Screen1.this, "Service is disconnected", 1000).show();
mBounded = false;
mService = null;
}
};
//Bind Service and Activity
Intent mIntent = new Intent(this,MqttPushService.class);
bindService(mIntent, mConnection, BIND_AUTO_CREATE);
}//END of onStart()
@Override
protected void onStop() {
super.onStop();
if(mBounded) {
mService.setServiceCallbacks(null); // unregister
unbindService(mConnection);
mBounded = false;
}
}//END of onStop()