アクティビティが開始されると、サーバーとして機能するサービスが作成されます。サーバーは、デスクトップ上の Python スクリプトから生データを受け取ります。サービスは、DM の名前にキー付けされたハッシュ マップ内の Python スクリプトからのすべてのデータを処理する DataManagers を作成および維持します。いつでも、アクティビティがサービスとプロセスからのデータをサービス要求にバインドする必要があります。アクティビティが一時停止、停止、または破棄されると、バインドが解除されます。
バインディングは正しいと思いますが、サービスを開始すると、渡された ServiceConnection は常に null が返されます。何が起こっているのですか?私のコードは Android の RemoteService クラスから直接盗まれました ありがとう ~Aedon
{コードの補遺}
PublicService にバインドする HomeScreen アクティビティ
@Override public void onCreate(Bundle icicle) {
super.onCreate(icicle);
doBindService();
setContentView(R.layout.homescreen);
initView();
}
public void initView() {
workbenchs = (Gallery)findViewById(R.id.workbenchs);
workbenchs.setMinimumHeight(h/4);
workbenchs.setAdapter(new WorkBenchAdapter(this));
workbenchs.setOnItemClickListener(new OnItemClickListener() {
public void onItemClick(AdapterView<?> arg0, View arg1, int arg2, long arg3) {
Intent it = new Intent(HomeScreen.this, Controller.class);
it.putExtra("workbench", arg2);
startActivity(it);
}
});
}
// Gallery Adapter
public class WorkBenchAdapter extends BaseAdapter {
public WorkBenchAdapter(Context c) { }
public int getCount() {return mBoundService.getNumBenchs();}
public Object getItem(int position) {return position;}
public long getItemId(int position) {return position;}
public View getView(int position, View convertView, ViewGroup parent) {
ImageView i = new ImageView(HomeScreen.this);
i.setImageBitmap(mBoundService.getWorkbench(position).toBitmap());
i.setLayoutParams(new Gallery.LayoutParams(w/4, h/4));
return i;
}
}
// Service Necessities
public boolean mIsBound = false;
private PublicService mBoundService;
private ServiceConnection mConnection = new ServiceConnection() {
public void onServiceConnected(ComponentName className, IBinder service) {
mBoundService = ((PublicService.LocalBinder)service).getService();
}
public void onServiceDisconnected(ComponentName className) {
mBoundService = null;
}
};
void doBindService() {
Log.d(TAG, "Binding...");
bindService(new Intent(this, PublicService.class), mConnection, Context.BIND_AUTO_CREATE);
mIsBound = true;
Log.d(TAG, "Bound.");
}
void doUnbindService() {
if (mIsBound) {
Log.d(TAG, "Unbinding...");
unbindService(mConnection);
mIsBound = false;
Log.d(TAG, "Unbound.");
}
}
私の問題は Workbench アダプターから来ています。アダプターが作成されると、get count (0 から開始) が呼び出されますが、mBoundService が null であると言い続けます。バインドする前にサービスを開始しようとしましたが、何も変わりません...