所以我有一个名为TreeActivity()的活动,我在服务中询问一个对象。然后我在名为TreeReceptor()的私有类中得到响应,该类只有这个函数:
public void onReceive(final Context context, final Intent intent) {
if (intent.getAction().equals(TreeReceptor.tree)) {
CustomSerializable root;
root = (CustomSerializable) intent.getSerializableExtra("tree");
GenerationTree treeGen = new GenerationTree(root);
treeGen.run();
}
}
GenerationTree类就是这个:
private class ReportGeneration extends Thread {
private CustomSerializable root;
public ReportGeneration(CustomSerializable root) {
this.root = root;
}
public final void run() {
System.out.println(root.getName());
}
}
在我的Activity中,我有一个按钮,将动作发送到服务,然后服务发送CustomSerializable对象。我正确地收到了所有内容,唯一的问题是onReceive函数被多次执行。 例如:如果是我第一次点击按钮,它就不会做任何事情。如果它第二次执行onReceive函数两次,如果它第三次执行它三次,依此类推......
这是我第一次使用Android应用而且我很丢失,任何想法可能是什么?我发现了一些其他问题,说对于某些特定设备,它不止一次执行该功能,所以仅仅为了一些信息,我在Nexus 5 API23 x86 Andriod 6.0
答案 0 :(得分:0)
public void onReceive(final Context context, final Intent intent) {
if (intent.getAction().equals(Tree.tree)) {
CustomSerializable tree;
**final root =(CustomSerializable)intent.getSerializableExtra("tree");**
GenerationTree treeGen = new GenerationTree(root);
treeGen.run();
}
}
root对象使其成为最终对象。
抱歉英语。
答案 1 :(得分:0)
我发现了问题,就是我为每次点击创建了一个受体。现在我只创建了一个接收器,当我已经收到对象时,我确保将它从接收器列表中取出。要做到这一点,我使用这一行:unregisterReceiver(receptor);
编辑:但是找不到问题为什么我第一次点击它没有做任何事情。
答案 2 :(得分:0)
确保在onResume或onCreate方法中注册您的受体,并分别在onPause或onStop方法中取消注册。
不要在点击按钮时执行此操作。
你可以在这里看到教程
http://www.vogella.com/tutorials/AndroidBroadcastReceiver/article.html#dynamicreceiverregistration