关于Service的start方法笔记

本文探讨了AndroidService中的onCreate方法只执行一次的特性,以及多次使用startService()方法时是否会产生不同对象的问题。通过示例代码演示了在Activity启动Service和按钮点击时启动Service的情况,并分析了输出结果,表明了多次调用onStart方法是在同一个实例上操作。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

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



 

 

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值