【问题标题】:startManagingCursor() in a service?startManagingCursor() 在服务中?
【发布时间】:2015-04-10 18:29:52
【问题描述】:

有没有办法在服务而不是活动中使用 startManagingCursor() 并获得相同的结果(如 here 所示)?

更具体地说,我想根据服务的生命周期来管理给定游标的生命周期。例如,当服务被销毁时,它会自动在给定的 Cursor 上调用 deactivate()。另外,当服务重新创建/启动时,它会调用 requery() 方法。

  • 是否可以通过使用其他 适当的方法在实施 Service.class?
  • 其他方式可行吗?
  • 或者,它根本没有意义?

【问题讨论】:

    标签: android sqlite service android-activity cursor


    【解决方案1】:

    有没有办法在服务而不是活动中使用 startManagingCursor(),结果相同

    不,抱歉。

    使用Service.class中实现的其他适当方法是否可行?

    没有。

    其他方式可行吗?

    欢迎您编写自己的支持代码来做任何您想做的事情。不过,我怀疑你能否实现你所寻求的。

    或者,这根本没有意义?

    恕我直言,是的。在服务被销毁时自动关闭Cursor 并不是一个坏主意。但是,deactivate()/requery() 的概念在服务中对我来说毫无意义。这也是不可能的部分,因为您没有地方放置停用的Cursor,它将被您的服务的某些未来化身拾取。

    【讨论】:

    • @CommonsWare-这样可以吗..Activity ac = new Activity(); ac.startManagingCursor(sdCur12);
    • @NilayOnAndroid:绝对不是。
    • @CommonsWare-为什么不...我正在使用它并毫无例外地获得所需的反应...但是再次思考它可以是它之后的 moveToFirst() 吗? ?请回复,因为我现在处于两难境地。
    • @NilayOnAndroid:永远不要通过其构造函数创建活动。
    • @CommonsWare- 好的..知道了,这绝对是 moveToFirst() 发挥了作用..谢谢您的回复。
    【解决方案2】:

    有可能,你只需要把它投射到Activity

    如下 ((Activity) 上下文).startManagingCursor(cursor);

    这是完整的代码

    private void getUserId(Context context) {
    
         AdapterClass adapterClass = new AdapterClass(this,
         DatabaseDetail.TABLE_USER_REGISTRATION);
         adapterClass.Open();
    
         Cursor cursor = adapterClass.fetchRecords(new String[]{"USER_OID"},
         null);
         if (Build.VERSION.SDK_INT < Build.VERSION_CODES.HONEYCOMB) {
         ((Activity) context).startManagingCursor(cursor);
         }
         cursor.moveToFirst();
    
         adapterClass.close();
    
    }
    

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2011-09-26
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2011-06-20
      • 1970-01-01
      相关资源
      最近更新 更多