如何接收服务正在运行并在完成后更新UI
问题描述:
我正在尝试创建我的服务,即通过互联网下载数据,服务完成后发送intent
于onDestroy()
并在带有broadcastreceiver
的tabhost中接收它,但实际上它从未在onReceive()
中显示结果。下面是我在做什么:如何接收服务正在运行并在完成后更新UI
package com.stampii.stampii.collections;
import android.app.Service;
import android.content.Intent;
import android.os.Binder;
import android.os.IBinder;
public class MyService extends Service{
ThreadSave myThread;
public static boolean state;
public class LocalBinder extends Binder {
MyService getService() {
return MyService.this;
}
}
@Override
public IBinder onBind(Intent intent) {
return null;
}
@Override
public void onCreate(){
myThread = new ThreadSave(this, null);
myThread.start();
state = true;
}
@Override
public void onDestroy(){
super.onDestroy();
state = false;
Intent intent = new Intent("finish");
this.sendBroadcast(intent);
}
@Override
public void onStart(Intent intent, int startid) {
super.onStart(intent, startid);
}
}
这是我的广播接收器:
receiver = new BroadcastReceiver() {
public void onReceive(Context context, Intent intent) {
if(intent.getAction().equals("finish")) {
Log.e("","UGJKHFKLJGHKGKHGKHGKJGLGKLJHKJHVkajhgflasygdfkashfvlazsfklasfylaisyfhg;aisfglafgalskfgl");
}
}
};
registerReceiver(receiver, new IntentFilter("finish"));
,我如何启动/停止服务:
public void getCollectionsInfo(Context context){
progressBar.setVisibility(View.VISIBLE);
sync.setImageResource(0);
SharedPreferences isLogged = PreferenceManager.getDefaultSharedPreferences(getApplicationContext());
SharedPreferences.Editor editor = isLogged.edit();
editor.putBoolean("getProgBarCollection", true);
editor.commit();
/*mythreadSync = new ThreadSave(context, mUpdateUpdateCollections, progressBar);
mythreadSync.start();*/
this.stopService(new Intent(this, MyService.class));
this.startService(new Intent(this, MyService.class));
}
所以我的问题是,我是这样做是正确的,以及如何在服务中运行的线程结束并在BroadcastReceiver之后更新UI。
答
您正在使用带有“my.db.updated”的IntentFilter注册您的广播接收器作为要过滤的操作,但是您将“finish”作为操作发送您的意图。将意图更改为“my.db.updated”或将意图过滤器更改为“完成”
Actualluy我解决了这个问题,但它仍然无法正常工作 –