如何接收服务正在运行并在完成后更新UI

问题描述:

我正在尝试创建我的服务,即通过互联网下载数据,服务完成后发送intentonDestroy()并在带有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”或将意图过滤器更改为“完成”

+0

Actualluy我解决了这个问题,但它仍然无法正常工作 –