关于Service的start方法笔记

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



 

猜你喜欢

转载自xiaozhi6156.iteye.com/blog/1974386