- html - 出于某种原因,IE8 对我的 Sass 文件中继承的 html5 CSS 不友好?
- JMeter 在响应断言中使用 span 标签的问题
- html - 在 :hover and :active? 上具有不同效果的 CSS 动画
- html - 相对于居中的 html 内容固定的 CSS 重复背景?
我正在尝试连接我的服务和 Activity ,尝试了不同的方法,但没有任何效果。
当应用程序启动时,我在 SplashActivity 中启动 Servise。然后 Service 在后台做一些工作,当这些工作完成后,stopself()
方法在 Service 中调用 onStartCommand()
。
还有另一个 Activity 应该是这个后台工作的结果。问题是,只有在工作完成且服务停止时,我才需要将数据加载到 Recyclerview 中。所以我尝试使用 LocalBroadcastManager
并在 stopself()
方法之前向 Activity 发送消息。
问题是, Activity 没有从服务获得任何消息。这是我的代码,来自 stackoverflow 上的这个答案 - https://stackoverflow.com/a/8875292/7478869
服务:
@Override
public int onStartCommand(Intent intent, int flags, int startId) {
helper = ItemDatabaseHelper.getInstance(this);
preferences = getSharedPreferences(PREFERENCES, MODE_MULTI_PROCESS);
editor = preferences.edit();
helper.clearTable(Contacts_Contract.CONTACT_TABLE_NAME);
Set<ContactItem> setC = getContactList();
for(ContactItem item: setC){
helper.insertContacts(item);
}
editor.putBoolean(IS_CONTACTS_IMPORTED, true);
editor.apply();
Intent intent2 = new Intent("myevent");
// You can also include some extra data.
intent2.putExtra("message", "This is my message!");
LocalBroadcastManager.getInstance(this).sendBroadcast(intent2);
Log.d(TAG, "onStartCommand: stopping service");
stopSelf();
return START_STICKY;
}
Activity :
@Override
protected void onCreate(Bundle savedInstanceState) {
Log.d(TAG, "onCreate: starts");
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_contacts);
Toolbar toolbar = (Toolbar) findViewById(R.id.toolbar);
setSupportActionBar(toolbar);
getSupportActionBar().setDisplayHomeAsUpEnabled(true);
// Register to receive messages.
// We are registering an observer (mMessageReceiver) to receive Intents
// with actions named "custom-event-name".
LocalBroadcastManager.getInstance(this).registerReceiver(mMessageReceiver,
new IntentFilter("myevent"));
}
// Our handler for received Intents. This will be called whenever an Intent
// with an action named "custom-event-name" is broadcasted.
private BroadcastReceiver mMessageReceiver = new BroadcastReceiver() {
@Override
public void onReceive(Context context, Intent intent) {
// Get extra data included in the Intent
String message = intent.getStringExtra("message");
Log.e("receiver", "Got message: " + message);
Toast.makeText(context, "Import completed", Toast.LENGTH_SHORT).show();
}
};
最佳答案
从策略上讲,这不起作用的原因是 LocalBroadcastManager
是本地进程,而您有两个进程。
从战略上讲,将这段代码放在一个单独的进程中是不必要的,也是危险的。例如,您依赖于 MODE_MULTI_PROCESS
,has been deprecated for over two years并且从来没有特别好地工作过。
关于android - LocalBroadcastManager 不会将消息从服务发送到 Activity ,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/46302542/
我在将 Eclipse 项目导入 Android Studio 时遇到此错误。它显示了一条建议将库 Gradle: com.android.support:support-core-utils-27.
我正在尝试添加 flutter 的应用程序购买包。这首先造成了 AndroidX 迁移问题。然后在迁移之后我又遇到了一个我不知道如何解决的错误。 我什至没有为应用内购买编写任何代码。就在添加到 pub
我有一个显示产品列表的 fragment 。每个列表项都有一个监视列表按钮,如果未列入监视列表,则显示一个透明的心形图标;如果已列入监视列表,则显示一个红色心形图标。用户可以在列表页面中单击此心形图标
我遵循了 Youtube-Tutorial (https://www.youtube.com/watch?v=y8R2C86BIUc&list=PLgCYzUzKIBE8KHMzpp6JITZ2JxT
我正在尝试从服务向 Activity 发送消息,但由于某种原因它无法正常工作。 Activity @Override protected void onCreate(Bundle saved
在我的应用程序中,我必须从 IntentService 类通知我的 Activity 。为此,我正在使用 LocalBroadcastManager。但是我在我的广播接收器的 onReceive 中没
在我的 Android 应用程序中,我想广播一些通知。在 MainActivity 中,我注册了处理消息的 BroadcastReceiver 但据我所知,如果我不想发送消息,不建议使用全局 Broa
我正在使用新的 Android 构建系统创建一个应用程序,并使用 LocalBroadcastManager 将来自 IntentService 的通知发送回 Activity. 我已将以下产品风格定
我知道虽然 android 允许在 Intent 中传递 Serializable 对象,但出于性能原因不推荐这样做。 但是,如果使用 LocalBroadcastManager,对象是否会被序列化,
如何注册我的 App Widget(主屏幕小部件)以收听通过 LocalBroadcastManager 发送的本地广播消息? 最佳答案 您的应用程序小部件实际上是另一个应用程序进程(例如,主屏幕)中
我试图找到如何在扩展 BaseAdapter 的类中使用 LocalBroadcastManager 的答案,但是经过数小时的研究后,我没有找到正确的答案.我需要从适配器中的 Fragment 调用方
Android 的兼容包支持 LocalBroadcastManager,它可以在我的进程中发送广播。 http://developer.android.com/reference/android/s
我有一个 Activity A 和一个服务 S。它们通过 LocalBroadcastManager 进行通信。 如果 S 调用 sendBroadcast 两次,并依次传递两条消息 M1 和 M2,
我正在 Android 中处理这个项目,其中一个方面需要一个带有前台服务的 CountdownTimer。 Stack Overflow 上的其他一些答案提到 LocalBroadcastManage
你能帮我解决这个问题吗?我已经实现了一个接收器(通过 XML 注册),它监听特定的本地广播,然后启动一个服务进行进一步处理,但不知何故该接收器没有接收任何广播。 虽然另一个通过代码在本地注册的接收器能
我正在尝试连接我的服务和 Activity ,尝试了不同的方法,但没有任何效果。 当应用程序启动时,我在 SplashActivity 中启动 Servise。然后 Service 在后台做一些工作,
接收器可以注册到LocalBroadcastManager吗?在不同的线程中执行?我们使用 LocalBroadcastmanager 注册一个 Intent void registerReceive
我尝试学习 LocalBroadcastManager。在网络上搜索并实现了一个简单的应用程序,其中包含两个 Activity 来执行 LocalBroadcastManager。但它不起作用。我找不
我想知道 LocalBroadcastManager 是否比对订阅事件发布者的 Objects 的方法调用更好,以及开销(如果有)是否值得。 我正在开发一个聊天应用程序,示例过程包括将新收到的原始消息
谁能给我一个例子,说明如何在 Activity 类中正确取消注册 LocalBroadcastManager 接收器? Android 开发人员培训建议这样做: @Override publ
我是一名优秀的程序员,十分优秀!