Activity onCreate同时startService问题分析

我尝试在Activity的OnCreate状态时,初始化一个Service,然后在Service初始化很多全局参数,发现这样做是有问题的:

Activity会在OnCreateView之后被初始化,即Activity会先把控件初始化完,再真正执行startService()。我尝试用Thread.sleep睡5秒,发现上述情况。所以,要startService,必须的等View都初始化完毕,而且,Service创建的参数在这之前都不能用。

	@Override
	protected void onCreate(Bundle savedInstanceState) {
		super.onCreate(savedInstanceState);
		requestWindowFeature(Window.FEATURE_INDETERMINATE_PROGRESS);
		setContentView(R.layout.activity_btspp);
		if (savedInstanceState == null) {
			getSupportFragmentManager().beginTransaction()
					.add(R.id.container, new PlaceholderFragment(this)).commit();
		}

		Log.e(TAG, "Starting Service...");
    	//Intent intent = new Intent(this,AudioDetectService.class);
    	
    	//
    	//startService(intent);
    	 
    	Log.e(TAG, "OnCreate:end sleep");	 
	}

Activity和Fragment等函数都提供了onViewCreated()函数,意思是view已经创建完毕了,它在onCreateView()执行完后才被调用。但在这startService(),结果还是一样,startService必须要执行完onViewCreate才会启动。我把下面的UI相关的代码注释后,可以顺利通过编译,不然会先执行被注释的代码,再执行Service的onCreate。因为被注释的代码中含有Service里面设置的数据,所以导致我的代码出错。

@Override
		public void onViewCreated(View view, @Nullable Bundle savedInstanceState) {

			Log.e(TAG_FRAG,"onViewCreate");
			Log.e(TAG_FRAG, "Starting Service...");
			Intent intent = new Intent(mContext,AudioDetectService.class);
			mContext.startService(intent);
			
			/*
			//mBTAdp = BluetoothAdapter.getDefaultAdapter();
			if(BTController.getBTAdp()==null){
				Log.e(TAG_FRAG,"onCreateView getBTAdp failed");
				
			}
			mBTAddr.setText(getString(R.string.btAddr)+BTController.getBTAdp().getAddress());

			// 读取蓝牙状态并显示
			if (BTController.getBTAdpState() == BluetoothAdapter.STATE_OFF)
				mTGBtnSwitch.setChecked(false);
			else if (BTController.getBTAdpState() == BluetoothAdapter.STATE_ON)
				mTGBtnSwitch.setChecked(true);*/
			
			super.onViewCreated(view, savedInstanceState);
		}

注释代码后,顺利开启Activity的log。


  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 1
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值