Sea*_*eil 1 java android android-intent
现在我有一个LinkedListIntent,IntentService它可以跟踪Intents入队的内容Service.我发现contains()即使对于相同的Intent ,该方法也永远不会返回true.还有什么我需要做的比较两个意图吗?
@Override
public int onStartCommand(Intent intent, int flags, int startId) {
if(queue.contains(intent)){
//Never reaches here
intent.setAction(NO_ACTION);
}
queue.push(intent);
return super.onStartCommand(intent, flags, startId);
}
Run Code Online (Sandbox Code Playgroud)
发送Intent的示例代码:
Intent i = new Intent(context, NodeIndexService.class);
i.setAction(NodeIndexService.REFRESH);
i.putExtra(NodeIndexService.TYPE, indexType);
i.putExtra(NodeIndexService.RESULT_RECEIVER, receiver);
context.startService(i);
Run Code Online (Sandbox Code Playgroud)
使用此代码一个接一个地发送的两个Intent应该是相同的,不是吗?上下文没有变化,附加内容也是一样的.
有一种方法可以专门比较意图 - filterEquals():http://developer.android.com/reference/android/content/Intent.html#filterEquals (android.content.Intent )
使用此方法时,看起来具有相同数据,类别和操作的意图将被视为相等.
您需要定义自己的equals方法以满足您的平等标准,无论它们是什么.
根据IntentAPI文档,该equals方法由Object--simple identity 定义.
这或多或少是标准的Java基础; 看看这个类是否定义了它自己的相等性,如果没有,你需要创建自己的等式 - 需要注意的是,实例所处的环境也可以检查相等性,因此实现equals和hashCode 正确实现是值得的.
(如果您定义了一个equals,则需要定义hashCode完整性.)
您的代码专门创建了新的意图 - 这就是做什么new.
您正在创建两个对象:对象标识意味着查看两个引用是否引用完全相同的对象,而不是任意属性是否相同.如果要根据任意条件进行比较,则需要定义自己的equals方法来执行您关心的比较.
| 归档时间: |
|
| 查看次数: |
4093 次 |
| 最近记录: |