到目前为止,我一直在我的应用程序中使用适用于Android V3的 Google AnalyticsSDK,它一直运行正常(Android 3.0及更高版本支持我的应用程序).现在V3已被弃用,最新版本是适用于Android的Google Analytics SDK v4.
通过阅读官方文档以及此博客文章,我能够使其工作.但我还有几个问题:
1)什么是全球追踪器和应用追踪器?它背后的概念是什么?如果我有多个Android应用程序,那么差异是什么.我的所有应用都应该拥有相同的全球追踪器吗?从这个意义上说它是"全球性的"吗?我在这里有点无能为力.
2)V4使用Google Play Services V4.3及更高版本,并且没有像V3那样的独立库.那么,删除V3库jar文件和代码是否安全?Google Developers页面会说:
SDK可以使用,并且可以在没有Google Play服务的设备上使用.在这种情况下,SDK将自动回退到本地调度.
也
通常,运行Android 2.3(Gingerbread)或更高版本并安装了Google Play商店应用的设备会在几天内收到更新.这允许您使用Google Play服务中的最新API并访问Android生态系统中的大多数设备(不支持早于Android 2.3的设备或不支持Google Play商店应用的设备).
因此,使用V4,我的应用跟踪是否仍然适用于可能没有Google Play Services V4.3或更高版本的所有设备?如果没有,那么应用程序会因为没有找到分析代码所需的特定类而崩溃吗?或者,可以安全地假设所有使用Android 2.3+的设备都与Analytics V4兼容吗?
注:在谷歌Play服务的文档页面不显示如何检查是否谷歌播放服务.但我不想不必要地提示用户,因为分析不会影响我的应用程序的功能.此外,我可以进行检查,但我不想错过任何分析信息.
Android仪表板显示只有一半的设备具有Android 5.0及更高版本,但我们的客户数据集的数字看起来不同 - 超过93%的用户.因此,我们决定放弃对Android版本低于5.0且minSdkVersion从15 更改为21的设备的支持.
此升级要求我们审查所有过时的功能并清理我们应用于支持旧版本的一些hacky变通方法.我们现在可以应用的主要功能之一是替换android.support.v4.app.Fragment为android.app.Fragment.这听起来不错,特别是当我们知道片段API已被审查和改进时.
只是为了确保我走正确的道路并且android.app.fragment不会让我感到惊讶我想从这个stackoverflow线程中解释一下问题- 你是否正在使用支持库中的片段,即使它们已经可用,在为Android 5开发时?片段API中是否存在Android 5.0及更高版本中出现的错误并在支持库中修复?
更新
在Android-KTX发布后,Jake Wharton在其中一个PR中发表了以下声明:
感谢您花时间制作PR(带有测试!),但我们想鼓励开发人员只使用支持库片段.下一版本的Android将弃用作为平台一部分的片段版本.因此,我们不会在此项目中添加任何扩展来支持它们.
因此,使用支持库中的片段是正确的做法.
假设我们有两个实体,EntityA和EntityB。两个实体都有一个存储库来查询数据库,EntityARepository并且EntityBRepository. 也有为他们俩提供的服务,EntityAService和EntityBService.
现在 中有一个方法EntityBService,它也需要使用EntityA. 这样做的正确方法是什么?
EntityBService使用EntityARepository吗?EntityBService使用EntityAService?我可以看到直接使用存储库可能会非常方便,但如果不仅有两个实体,它似乎也会变得有点混乱。
是否有围绕此主题或建议的通用设计模式?
我在我的应用程序中实现了一个网格视图。为了刷新网格,我给了它触摸事件。然后点击我用那个网格项目做一些事情。下面是手势检测器的代码 -
public class OnSwipeTouchListener implements OnTouchListener {
private final GestureDetector gestureDetector;
public OnSwipeTouchListener(Context ctx) {
gestureDetector = new GestureDetector(ctx, new GestureListener());
}
private final class GestureListener extends SimpleOnGestureListener {
private static final int SWIPE_THRESHOLD = 300;// make it 100 if down
// swipe is not working
private static final int SWIPE_VELOCITY_THRESHOLD = 100;
@Override
public boolean onDown(MotionEvent e) {
return true;
}
@Override
public boolean onFling(MotionEvent e1, MotionEvent e2, float velocityX,
float velocityY) {
boolean result = false;
try …Run Code Online (Sandbox Code Playgroud)