安卓中通过AIDL方法,客户端传入到服务端每次都是相同的对象,服务端是个链表,每次都创建新例对象添加到链表中,我想只保留一个在服务端的此对象应该怎么办
时间: 2024-05-06 19:20:03 浏览: 12
可以在服务端维护一个静态变量来保存该对象,每次客户端传入时判断静态变量是否为空,如果为空则将传入的对象赋值给静态变量,否则直接使用静态变量即可。示例代码如下:
服务端:
```
public class MyService extends Service {
private static MyObject sObject; // 静态变量保存对象
private final IMyAidlInterface.Stub mBinder = new IMyAidlInterface.Stub() {
@Override
public void setObject(MyObject object) throws RemoteException {
if (sObject == null) {
sObject = object;
}
// 其他操作
}
};
}
```
客户端:
```
public class MainActivity extends AppCompatActivity {
private IMyAidlInterface mService;
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_main);
Intent intent = new Intent();
intent.setComponent(new ComponentName("com.example.myservice", "com.example.myservice.MyService"));
bindService(intent, mConnection, Context.BIND_AUTO_CREATE);
findViewById(R.id.btn_set_object).setOnClickListener(new View.OnClickListener() {
@Override
public void onClick(View v) {
try {
mService.setObject(new MyObject()); // 传入对象
} catch (RemoteException e) {
e.printStackTrace();
}
}
});
}
private ServiceConnection mConnection = new ServiceConnection() {
@Override
public void onServiceConnected(ComponentName name, IBinder service) {
mService = IMyAidlInterface.Stub.asInterface(service);
}
@Override
public void onServiceDisconnected(ComponentName name) {
mService = null;
}
};
}
```