2

我在服务中注册了一个动态广播接收器,并且我的服务在一段时间(某些条件)循环中执行了一些繁重的 sdcard 读/写操作。

当我的广播接收器未收到从我的另一个应用程序(在其他进程中)发送广播时。

当它不执行 while 循环时,也会收到相同的广播。

我还尝试使用 Thread.Sleep(100) 结束循环,只是为了给广播接收器一些时间来执行,但它不起作用。

任何有关这方面的帮助都会对我有很大帮助。

-谢谢和问候,曼朱

Code below for registering BxRx:
this.registerReceiver(myReceiver, new IntentFilter(ACTIVITY_NAME));

code below for sending broadcast:
Intent intnt = new Intent(ACTIVITY_NAME);
            intnt.putExtra("STOP_ALL_TESTING", true);
            Log.d(TAG,"Sending BX STOP_ALL_TESTING");
            myActivity.this.sendBroadcast(intnt);

code below for while loop:
while(somecondition){
:
:
:
Thred.sleep(100);
}


    public void onReceive(Context context, Intent intent) {
            Log.d(TAG,"Received intent: "+intent.getAction());
            boolean flag = intent.getBooleanExtra("STOP_ALL_TESTING", false);
            Log.d(TAG,"Flag set to: "+flag);

            if((boolean)intent.getBooleanExtra("STOP_ALL_TESTING",false)){
                Log.d(TAG,"Broadcast received to STOP_ALL_TESTING");
                Log.d(TAG,"Bx Rx, setting flag to stop testing as requested by user");
                synchronized(this){
                    bStopTesting=true;
                }
            }
        }
4

1 回答 1

0

请粘贴您的完整代码。

看起来您的问题是您在服务的 onStartCommand 方法中有一个无限循环。onStartCommand 和 onReceive 都在同一个线程上执行,并且一个接一个地执行。应用程序主线程是一个 Looper 线程,它以顺序方式处理事件。基本上,如果您在服务中进行了无休止的操作,您将阻塞整个主线程,其中包括所有的 GUI、服务和广播接收器。调用 Thread.sleep() 将无济于事,因为该方法不会返回。为避免这种情况,您可以使用 IntentService http://developer.android.com/reference/android/app/IntentService.htmlclass,它将处理另一个线程上的意图。

public class HeavyService extends IntentService {

    public HeavyService() {
        super("HeavyService");
    }

    @Override
    public void onCreate() {
        super.onCreate();
        //do your initialization
    }

    @Override
    protected void onHandleIntent(Intent intent) {
        //this will be executed on a separate thread. Put your heavy load here. This is
        //similar to onStartCommand of a normal service
    }
}
于 2013-08-11T08:15:50.837 回答