【问题标题】:Sending value back from handler in android从android中的处理程序发送回值
【发布时间】:2016-02-11 20:20:06
【问题描述】:

您好,我正在将处理程序消息从测试服务传递到测试活动。有什么方法可以将对象从 TestActivity 返回到 Testservice 类。或者有没有更简单的方法来做到这一点。

public class TestService {
    public Handler testResultsHandler;

    private BooleanstoreTestResults(String message) {
        if (testResultsHandler != null)

        {
            Message message = testResultsHandler.obtainMessage();
            message.obj = "refresh";
            testResultsHandler.sendMessage(message);
        }
    }
}


public class TestActivity extends Activity {
    private TestService testService = new TestService(this);


    @Override
    protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.activity_main);
        Toolbar toolbar = (Toolbar) findViewById(R.id.toolbar);
        setSupportActionBar(toolbar);
        formView = (View) findViewById(R.id.form);
        messageTextView = (TextView) findViewById(R.id.status_message);
        testService.testResultsHandler = new TestResultResponse();

    }

    private class TestResultResponse extends Handler {
        @Override
        public void handleMessage(Message msg) {
            super.handleMessage(msg);
            if (msg != null && msg.obj != null && this != null) {
                if (msg.obj.toString().equals("refresh")) {
                    refresh(); // return value back to testservice in here
                }
            }
        }
    }
}

【问题讨论】:

    标签: java android android-handler


    【解决方案1】:

    您需要使用 ServiceConnection 将 Service Handler 存储在 Activity 中。

    private ServiceConnection mServiceConnection = new ServiceConnection() {
        
        @Override
        public void onServiceDisconnected(ComponentName name) {
            // onServiceDisconnected is only called in extreme situations (crashed / killed).
            mBound = false;
        }
        
        @Override
        public void onServiceConnected(ComponentName name, IBinder service) { 
            mConnectorSender = new Messenger(service);                  
            mBound = true;
        }
    }; 
    

    并像这样绑定服务:

    mContext.bindService(intent, mServiceConnection, Context.BIND_AUTO_CREATE);
    

    Here is 来自 Vogella 的好教程。

    另外,最好在 msg.arg1 和 msg.arg2 参数中发送小消息。您可以为刷新操作创建常量并将其分配给 msg.arg1。这会比发送对象更好。

    【讨论】:

      猜你喜欢
      • 2021-08-08
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2019-01-09
      相关资源
      最近更新 更多