android service 启动线程,Android startService()需要很长时间才能返回UI线程

我的用例是(大致)首次启动时的以下内容:

活动开始服务

service获取并保存数据库中的数据

服务通过意图通知活动

活动显示数据

现在我想在服务繁忙时显示进度条.问题是:

startService(new Intent(getApplicationContext(), UpdateDataService.class));

需要很长时间才能"返回"UI线程.它似乎是一个同步函数(或不?).如果清空服务类,则几乎立即处理startService命令.似乎UI线程等待Serice处理它的工作,这根本没有意义.我尝试启动(尽管看起来很愚蠢)在我的UI线程中显示进度条时启动服务异步任务.奇怪的是,这有时会起作用.Othertimes我只是在我的服务正在工作时获得一个白色屏幕,之后是一毫秒ma进度条然后我的UI.

现在我的问题是:如何在不阻止我的UI的情况下启动服务?

public class MyClass extends TabActivity {

private ProgressDialog pd;

@Override

public void onCreate(final Bundle savedInstanceState) {

super.onCreate(savedInstanceState);

setContentView(R.layout.main);

Intent intent = null;

//building some tabs here, setting some text views....

// starting service if does not exist yet

boolean serviceRunning = false;

final ActivityManager manager = (ActivityManager) getSystemService(ACTIVITY_SERVICE);

for (final RunningServiceInfo service : manager.getRunningServices(Integer.MAX_VALUE)) {

if ("aegir.mobile.UpdateDataService".equals(service.service.getClassName())) {

serviceRunning = true;

Log.i(MY_APP_TAG, "Service found.");

}

}

if (!serviceRunning) {

pd = ProgressDialog.show(this, "Loading...", "Setting up data.", true, false);

new StartServiceAsync().execute("");

}

}

private final Handler handler = new Handler() {

@Override

public void handleMessage(final Message msg) {

pd.dismiss();

}

};

public class StartServiceAsync extends AsyncTask {

@Override

protected String doInBackground(final String... params) {

// starting service

startService(new Intent(getApplicationContext(), UpdateDataService.class));

return null;

}

@Override

protected void onPostExecute(final String result) {

handler.sendEmptyMessage(0);

super.onPostExecute(result);

}

}

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

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值