Android 将不会在我的活动中调用处理程序

Android 将不会在我的活动中调用处理程序,android,android-service,android-handler,Android,Android Service,Android Handler,我在活动中创建了一个处理程序。处理程序将存储在应用程序对象中 protected void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState); setContentView(R.layout.action_activity); appData = (AttachApplication) getApplication(); Handler updateHandler =

我在活动中创建了一个处理程序。处理程序将存储在应用程序对象中

protected void onCreate(Bundle savedInstanceState) {
    super.onCreate(savedInstanceState);
    setContentView(R.layout.action_activity);
    appData = (AttachApplication) getApplication();

    Handler updateHandler = new Handler() {
        public void handlerMessage(Message msg) {
            Log.d( TAG, "handle message " );
        }
    };
    appData.setUpdateHandler( updateHandler );


}
public int onStartCommand(Intent intent, int flags, int startId) {
    Log.d(TAG, "onStartCommand of attachService");
    List<Job> jobList = DBManager.getInstance().getAllOpenJobs();
    appData = (AttachApplication) getApplication();
    updateHandler = appData.getUpdateHandler();
            updateHandler.sendEmptyMessage( 101 );
我的计划是在我的服务中设置emtpymessage时调用此handleMessage。服务从应用程序对象检索处理程序

protected void onCreate(Bundle savedInstanceState) {
    super.onCreate(savedInstanceState);
    setContentView(R.layout.action_activity);
    appData = (AttachApplication) getApplication();

    Handler updateHandler = new Handler() {
        public void handlerMessage(Message msg) {
            Log.d( TAG, "handle message " );
        }
    };
    appData.setUpdateHandler( updateHandler );


}
public int onStartCommand(Intent intent, int flags, int startId) {
    Log.d(TAG, "onStartCommand of attachService");
    List<Job> jobList = DBManager.getInstance().getAllOpenJobs();
    appData = (AttachApplication) getApplication();
    updateHandler = appData.getUpdateHandler();
            updateHandler.sendEmptyMessage( 101 );
public int-onstart命令(Intent-Intent、int-flags、int-startId){
Log.d(标记“attachService的onStartCommand”);
List jobList=DBManager.getInstance().getAllowenJobs();
appData=(AttachApplication)getApplication();
updateHandler=appData.getUpdateHandler();
更新handler.sendEmptyMessage(101);

我检查了日志,但没有句柄消息,因此我的计划似乎不起作用。每次我的服务完成工作时,我都要更新一个文本字段。

在您的情况下,您应该像这样使用BroadcastReceiver:

sendBroadcast(new Intent(MainService.REFRESH_DATA_INTENT));
在活动类中定义接收者:

public class DataUpdateReceiver extends BroadcastReceiver {

    @Override
    public void onReceive(Context context, Intent intent) {
        if (intent.getAction().equals(MainService.REFRESH_DATA_INTENT)) {
                        //do something
        }
    }
}
在onCreate或onStart方法上,必须注册接收者:

DataUpdateReceiver dataUpdateReceiver = new DataUpdateReceiver();
IntentFilter intentFilter = new IntentFilter(MainService.REFRESH_DATA_INTENT);
registerReceiver(dataUpdateReceiver, intentFilter);
在您的服务中添加以下内容:

public static final String REFRESH_DATA_INTENT = "done";
当你完成所有工作人员的任务后,你必须像这样发送brocast:

sendBroadcast(new Intent(MainService.REFRESH_DATA_INTENT));

您的代码片段说的是
public void handleMessage(Message msg)
,但我认为您的意思是
public void handleMessage(Message msg)
,没有
r
。当您打算从超类重写方法时,可以通过使用@Override标记来避免这些问题;因此您的代码段将呈现
@Override public void handleMessage(Message msg)
,而
@Override public void handleMessage(Message msg)
将是一个错误。

你想做什么?我真的不认为在活动中实例化处理程序有什么意义,因为你所做的只是从消息队列中获取消息。你当然不想玩弄Android发布的任何消息,而且有更好的方法向活动发送消息

当然,您没有包含AttachApplication的代码,因此我只能推测

您还试图从服务访问此处理程序。发生了一些情况,但我不确定是什么


如果您想在每次服务完成时更新一个TeTVIEW,将一个广播意图从服务发送到活动中,并在活动中使用一个广播接收器。您还应该考虑使用一个智能服务而不是一个服务。

谢谢这真的帮助了,我可以在视图中做一些事情,更新我的文本字段。s