众所周知,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方法都是在一个实例上操作