众所周知,Android Service里的onCreate方法永远只会执行一次。
当调用startService()方法的时候,如果Service还没启动的话,就会调用onCreate(),否则调用onStrat方法。
这里就会产生一个问题,在多次使用startService()的时候,会不会产生不同的对象呢?
其实仔细想想也就知道了,onCreate()方法,就会创建实例,而onStrat()就不会产生实例。
如果在多处地方调用onStrat也一样
为些我写一个例子来测试一下;
Activity如下,在创建Activity的时候启动了Service,然后点击按钮也调用startService()方法
public class MainActivity extends Activity implements OnTouchListener {
Button btton;
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_main);
Intent i = new Intent(MainActivity.this, MyService.class);
i.putExtra("msg", "Activity 启动");
startService(i);
btton = (Button) findViewById(R.id.button1);
btton.setOnClickListener(new OnClickListener() {
@Override
public void onClick(View v) {
Intent i = new Intent(MainActivity.this, MyService.class);
i.putExtra("msg", "Button启动");
startService(i);
}
});
}
Service,定义一个int 型,在每次的调用onStrat()的时候把int的值给输出来,变量加1
public class MyService extends Service {
private int i = 0;
@Override
public IBinder onBind(Intent intent) {
// TODO Auto-generated method stub
return null;
}
@Override
public void onCreate() {
Log.v("xiaozhi", i + "i");
super.onCreate();
}
@Override
public void onStart(Intent intent, int startId) {
String msg = intent.getStringExtra("msg");
Log.v("xiaozhi", msg + "========>" + i+" satrtid====>"+startId);
i++;
super.onStart(intent, startId);
}
输出如下,由此可见,调用onStart方法都是在一个实例上操作