如何能服务的Android更新启动它的活动的用户界面?(How can Android servic

2019-07-30 00:12发布

我是新来的Android编程,所以我面临着如何选择来设计我的应用程序的最佳途径一些一般性的问题。

我想要做的基本上是一个媒体播放器。 我想是因为我希望它也玩的时候不显示该活动的媒体播放器上的服务运行。

我的问题是,我怎么能根据业务工作流程更新我的活动的UI(例如,歌曲的变化,我要显示它的名字)?

我想我可以为了从我的服务意向发送到我的活动,并调用UI更新使用本地广播管理器(它似乎对不对?)

但是...我希望我的服务,做一些东西,同时播放音乐(如查询/更新DB)。 为此,我想在运行于不同的流程服务(或线程?)。

所以..我想,在不同的进程中运行的服务,我将无法使用本地广播管理器(这是正确的?)。

我希望我解释什么是我的疑虑......任何人都可以帮助吗?

非常感谢!

Answer 1:

使用你的服务的异步任务来处理你需要在后台完成的工作。 当您需要更新UI使用异步任务的progressUpdate方法广播发回给任何感兴趣的活动。

伪例子。

活动

的onCreate - > startService和创造新的广播接收器。 确保来覆盖特定意图的onReceive方法和测试。

    mLocalBroadcastManager = LocalBroadcastManager.getInstance(this);

    broadcastReceiver = new BroadcastReceiver() {
        @Override
        public void onReceive(Context context, Intent intent) {
            if(intent.getAction().equals(yourActionType)) {
                //do work here
            } 
        }
    };

的onResume - >登记为广播接收器

    IntentFilter filter = new IntentFilter();
    filter.addAction(yourActionType);
    mLocalBroadcastManager.registerReceiver(broadcastReceiver, filter);

服务

的onCreate - >创建广播经理。

   mLocalBroadcastManager = LocalBroadcastManager.getInstance(this);

onStartCommand - >创建并在必要时执行新的异步任务。 (在onStart可以多次调用)

异步任务

doInBackground - >启动你需要的任何后台任务。 在这种情况下播放音乐。 请对publishProgress周期调用

onProgressUpdate - > sendBroadcast指示更新的状态

    Intent broadcastIntent = new Intent(yourActionType);
    broadcastIntent.putExtra(whateverExtraData you need to pass back);
    mLocalBroadcastManager.sendBroadcast(broadcastIntent);

onPostExecute - > sendBroadcast表明任务结束



文章来源: How can Android service update the UI of the activity that started it?