小编jel*_*lgh的帖子

Android:扩展用户的联系簿.性能ContentProvider vs Sqlite vs内存中的List

我和我的Android团队有问题.我们有一个应用程序,可以显示用户的联系簿,并提供扩展信息.

当前设置

我们的应用程序读取Android OS的联系人提供程序.将此信息发送到我们的服务器,为我们计算几个必要的字段.稍后我们的应用程序会提取此信息,并将此信息保存在SQLite数据库中.我们在数据库中最终得到的是两个表格.一个包含所有数字和服务器为我们计算的所有额外信息.另一个表是所有联系人(一个联系人可以有多个号码).此联系人表仅为性能而创建; 我们可以让Cursor在为用户呈现联系簿时选择CursorAdapter中此Contacts表中的所有行.因此,在向用户呈现联系簿时,我们只需要从我们自己的SQLite数据库中读取并且只需要读取一个表(例如,没有JOIN).

主要问题

有很多同步正在进行中.由于数据是重复的,我们需要检查添加/更改/删除,并需要同步所有的fing时间.此外,当我们现在要更改表示层中的特定内容时,我们需要更改Contacts表以包含此特定信息.

我们的优先事项

1st:向用户出示联系簿时的表现.

第二:代码可维护性.

因此,不要评论"不要重复数据 - 它是所有问题的根源".对我们来说,更重要的是用户没有性能问题,因为开发人员不得不花费额外的时间来编写良好的同步算法.

解决方案?

我不知道为什么,但我一直认为CursorAdapter(读取一个表中的所有行)的表现要比带有List对象(保存在内存中)的ArrayAdapter好得多.谁知道这是真的吗?因为一个能够帮助我们至少一半的解决方案是在启动时加入Contacts Provider(本地联系簿)和我们的扩展信息,将其保存在内存列表中并使用ArrayAdapter显示.

创建自己的内容提供商?我对创建自己的内容提供商知之甚少.任何人都试图创建一个内容提供者来扩展本地联系簿的信息并加入这些内容.也许与这个接口的实现:ContactsContract.DataColumnsWithJoins?有人试过类似的东西?在CursorAdapter中显示此信息时的性能如何?

请询问我可能忘记的任何更多信息,我会更新问题!

非常感谢所有有用的提示和解决方案!

sqlite performance android android-contentprovider android-cursoradapter

13
推荐指数
1
解决办法
739
查看次数

Android深层链接.从历史记录打开应用程序时,Intent不会重置

我有关于Android任务和意图管理的问题.

脚本

  1. 用户通过深入链接进入应用程序.
  2. 我们显示将URI放入Intent Data的通知.
  3. 用户单击该通知并进入应用程序并重定向到深层链接描述的某些Feature1Activity.
  4. 用户环顾四周,退出应用程序.
  5. 之后,用户从历史记录中打开应用程序(长按主页或多任务按钮).
  6. 现在,使用通知中使用的相同意图(使用Intent Data中的深层链接)来启动应用程序.
  7. 因此,用户再次进入Feature1Activity.

问题:

从历史记录启动应用程序(长按主页或多任务按钮)不会重置任务(从应用程序图标启动时它会执行此操作).

据我所知,从历史记录中启动应用程序不应该重置任务,因为它旨在用作"向右转 - 你在哪里".但是,在我的情况下,这是一个问题,因为从通知中启动应用程序是一次性的事情.

其他人遇到过这个问题?谁知道任何解决方案?

更深入

PendingIntent内部的意图是这样构建的:

Intent intent = new Intent (Intent.ActionView);
intent.addFlags (Intent.FLAG_ACTIVITY_NEW_TASK);
intent.addFlags (Intent.FLAG_ACTIVITY_CLEAR_TOP);
intent.addFlags (Intent.FLAG_ACTIVITY_CLEAR_WHEN_TASK_RESET);
intent.setData (Uri.Parse (DEEP_LINK_URL));
Run Code Online (Sandbox Code Playgroud)

我刚刚发现了FLAG_ACTIVITY_CLEAR_WHEN_TASK_RESET这一天并且真的认为它可以解决我的问题,但它没有任何区别.

有三项有趣的活动:

SplashActivity       (main launcher & listener of the deep-linking schema -- this activity just redirects either to login or OverviewActivity)
OverviewActivity     (authorized user's main activity)
Feature1Activity     (any feature that the deep-link is pointing to)
Run Code Online (Sandbox Code Playgroud)

当用户单击通知时发生的事情是SplashActivity充当模式的侦听器,并使用Activity.startActivities(Intent [])将深层链接URL转换为两个意图以启动OverviewActivity和Feature1Activity.

当我从SplashActivity中的通知中查看intent时,它总是包含Data中的深层链接.

一个解决方法

有一个解决方法,将一些booleanExtra字段设置为通知意图(例如"ignoreWhenLaunchedFromHistory"= true),然后在重定向之前检查SplashActivity

boolean fromHistory = (getIntent().getFlags() & …
Run Code Online (Sandbox Code Playgroud)

android android-intent

10
推荐指数
1
解决办法
1549
查看次数