在 Android 中使用 Service 作为单例

2024-04-09

创建一个不好的做法吗?Service作为单身人士工作?我的意思是一个Service它永远不会停止,并且包含一些其他引擎和Activities会使用,所以Service可能有类似的东西:

public class CustomService extends Service {
    private List<Profile> mProfiles;
    private static CustomService instance;

     public static CustomService getInstance() {
         if(instance == null) {
             instance = new CustomService();
         }
         return instance;
     }

     public List<Profile> getProfiles() {
          return mProfiles;
     }

     @Override
     public int onStartCommand(Intent intent, int flags, int startId) {
         ...
     }
     ...
}

做一个的原因Service而不仅仅是单例,它必须独立于应用程序工作,因为当它启动时,它会连接一个永远不应该关闭且不依赖于应用程序的 Websocket。你建议我做什么?有没有更好的方法来重复使用Service为了获得一些数据(例如mProfiles数组)可从其他引擎获得并且Activities?

我在某处读到过Service作为单例工作,但我不知道如何从应用程序中的任何其他点访问私有变量。


创建作为单例工作的服务是一种不好的做法吗?

这是多余的,并且按照您建议的方式,从Android Service作为应用程序组件,它执行其功能

  • Application生命周期,反过来又受
  • 系统事件。

应用程序组件的这种意图是通过以下方式实现的

  • 其声明中AndroidManifest.xml,
  • 触发它(启动/绑定/注册)和
  • (由系统)创建组件的实例Application并将其“附加”到ApplicationThread/ActivityThread.

也就是说,应用程序组件与Application由操作系统进程托管的实例和不能独立运行.


关于你的方法, 有两种情况:

1. CustomService的默认值构造函数是私有的按照模式。

通过致电getInstance()的单个实例CustomService被建造。该实例只是一个Java与以下对象没有任何共同点的对象(单例)Android Service应用程序组件。这onStart(), onStartCommand()等等方法永远不会被系统调用。

尝试启动“服务”(在清单中声明)startService(Intent) http://developer.android.com/reference/android/content/Context.html#startService(android.content.Intent)将会失败IllegalAccessException: access to constructor not allowed.

2. CustomService的默认值构造函数是公共的(根据发布的代码)。

如果该服务声明于AndroidManifest并且默认构造函数为空,startService()不过不会失败getInstance()将创建另一个实例CustomService这不会被视为Android Service应用程序组件。

这不是单例。


你建议我做什么?是否有更好的方法来重用该服务,以便从其他引擎和活动中获取一些数据(例如 mProfiles 数组)?

Use Service as per 文档 http://developer.android.com/guide/components/services.html并选择您需要的通信类型:

  • 单向通信(Activity --> Service) - 用一个started Service http://developer.android.com/guide/components/services.html#CreatingStartedService并处理每个Intent(附有您的数据,例如mProfiles以防万一Profile类工具Parcelable http://developer.android.com/reference/android/os/Parcelable.html) in onStartCommand();
  • 双向通信(Activity <-> Service) - 用一个bound Service http://developer.android.com/guide/components/bound-services.html并通过IBinder.

最后,Service in Android是一个单例。系统中每个服务只有一个实例。它按需启动并处理所有待处理的Intents/绑定客户端。一旦完成或明确停止,它将被销毁。

本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

在 Android 中使用 Service 作为单例 的相关文章

  • 如何使用retrofit2进行GET请求?

    我有一个在本地主机上运行的安静的 Web 服务 我想在该剩余 URL 上发出 Retrofit2 GET 请求 MainActivity java private void requestData public static final S
  • OPENGL ES 不工作:无当前上下文

    我尝试了 OpenGL ES2 for Android 一书中所示的程序 但它不起作用 我已经在Odroid E 三星s3 三星y 三星star上进行了测试 the gl version suported returns 2 but i g
  • 编译后从字节代码中删除注释

    我们正在使用一个包含使用 JAXB 注释进行注释的 bean 的库 我们使用这些类的方式完全不依赖于 JAXB 换句话说 我们不需要 JAXB 也不依赖注释 但是 由于注释存在 它们最终会被处理注释的其他类引用 这要求我将 JAXB 捆绑到
  • 如何将 Android Instrumentation 测试推送到模拟器/设备?

    我正在尝试使用 Ubuntu 9 04 中的命令行 shell 在 Android 模拟器上运行 Webkit 布局测试 adb s emulator 5554 shell am instrument w com android dumpr
  • 如何在 Android 应用程序中单击按钮时打开 Gmail Compose?

    当我的 Android 应用程序中单击按钮时 我尝试打开 Gmail 撰写屏幕 我需要 Google 提供的 API 密钥吗 或者我需要在按钮 onClickListener 中做什么 任何形式的见解都非常值得赞赏 正如 JeffC 指出的
  • Android CursorAdapter、ListView 和后台线程

    我一直在开发的这个应用程序有包含数兆字节数据的数据库可供筛选 许多活动只是列表视图 通过数据库中的各个级别的数据下降 直到到达 文档 即从数据库中提取并显示在手机上的 HTML 我遇到的问题是 其中一些活动需要能够通过捕获击键并重新运行带有
  • Android 8.1 中 Activity 自行旋转并恢复正常

    我的应用程序在所有 Android 版本上运行良好 但我注意到在 Android 8 1 0 Oreo 中 当我将屏幕从纵向活动转到横向活动时 以及当我按后退按钮时 它会显示异常行为 屏幕自动从横向旋转并恢复正常 看起来 Activity
  • 在后台服务中持续获取位置更新

    我正在开发需要在后台服务中持续获取位置更新的应用程序 我已经使用了它正在使用的后台粘性服务 但是 即使我添加了启动广播并在那里启动了服务 启动完成后服务也没有启动 服务启动并立即被杀死 另外 这不适用于奥利奥 服务在应用程序关闭几分钟后停止
  • 使用 mupdf android 库导航到特定页面

    我如何使用 muPDF 库导航到特定页面 或者有没有办法让图书馆不记得我最后在那个pdf文件中浏览的是哪一页 Uri uri Uri parse path Intent intent new Intent MainActivity getC
  • android 多关键词搜索

    我的应用程序包含搜索功能 它将搜索数据库内的内容 我的搜索的弱点是 我只能使用一个标签进行搜索 例如我只能搜索 猫 它会返回我的数据库中包含 猫 一词的内容 因为我正在使用LIKE在 select 语句期间进行查询 如何使用多个标签进行搜索
  • Android 消费品:“已经拥有该商品”,但 inventory.hasPurchase() 为 false

    我被 Google In App v3 困住了 我测试了一次没有消费的购买 例如 当应用程序在购买和消费之间崩溃时 现在我找不到出路 如果我尝试再次购买 它会显示 您已经拥有该商品 但是当我测试所有权时 它说我不拥有它 Inventory
  • 在 android 中,第一次单击时按钮侦听器未注册

    因为我是 Android 新手 所以我遇到了按钮监听器的问题 我正在使用 OnClickListener 来处理胸像 但它第一次点击后不执行一旦我单击多个 它就会表现良好 但如何使其在第一次单击时成为可能 这是我的代码 public cla
  • BitmapFactory.decodeResource() 忽略 jpg 图像的 inPreferredConfig 选项

    我尝试将jpeg资源图像加载到ARGB 8888格式的位图 BitmapFactory Options opts new BitmapFactory Options opts inPreferredConfig Bitmap Config
  • 从Android客户端登录appengine

    我正在尝试登录应用程序引擎并访问应用程序引擎中的用户服务API 基本上我希望能够看到谁登录了我的 servlet 我正在使用从 android 获取 authtoken 然后从应用程序引擎获取 ASID 或 SACID cookie 的身份
  • SDK尚未初始化,请务必先调用FacebookSdk.sdkInitialize()

    我在实现 Facebook SDK 时遇到此错误 并且我tried https stackoverflow com questions 15490399 error inflating class com facebook widget l
  • 如何在 onDraw() 方法中定义与像素无关的高度

    我扩展了 View 来构建自定义小部件 我想用独立的像素单位定义小部件的高度 我认为可以通过将像素密度乘以所需的高度来完成 但我不知道该怎么做 到目前为止我所拥有的 最小化 public class Timeline extends Vie
  • 将 Crashlytics 集成到图书馆项目

    我有一个图书馆项目 自定义视图库项目 它没有任何活动 服务 我想将 Crashlytics SDK 集成到我的库中 当我尝试通过 Android Studio 的 Crashlytics 插件 工具栏中的图标 添加它时 它只是停留在 Che
  • 制作弹跳动画

    我想做图层的弹跳动画 我已经完成了该图层从右到中心的操作 现在我想将其向后移动一点 然后回到中心 这会产生反弹效果 我想我可以用这样的翻译来做到这一点
  • Android Jasper 报告

    Jasper Reporting 可以集成到 Android 应用程序中吗 我正在尝试从 jrxml 文件生成 PDF CSV 文本和 XLS 报告 但是 我没有看到 Android SDK 支持 net sf jasperreports
  • Android Espresso - 如果未选中,请单击复选框

    I have onView withId R id check box perform click 但我只想在尚未选中该复选框时执行此操作 我怎样才能在浓缩咖啡中做到这一点 我还想根据其之前的状态来切换复选框 开关 起初 我尝试用此方法打开

随机推荐

  • DTO 接口

    我目前正在开始开发一个大型 Web 应用程序 主要包含 Angular SPA 和可以访问后端层的 OData WebAPI 我们正处于早期阶段 并已开始实施第一批课程 包括Model dll它位于公共名称空间中 以便所有层都可以访问它 我
  • Prometheus:如何根据 Consul 标签删除目标

    我的 Prometheus 服务器从 Consul 获取其目标列表 或 服务 用 Consul 的行话来说 我只想监视这些目标的子集 这应该可以通过普罗米修斯的正则表达式机制实现 但我无法正确配置 这是怎么做到的 我已经搜索过网络 但没有一
  • 如果原始值与任何when_表达式都不匹配,则返回原始值

    我的 SQL 导出字段上有一行 并且我试图删除字段中返回的空白值 如果它与姓氏中的 AMA 完全匹配 但是 当我使用当前代码导出文件时 姓氏不带 AMA 的名称将被完全删除 Max Orders ShipFirstName CASE Ord
  • 如何在不编写 20 个 if 语句或创建 20 个列表/字典的情况下进行以下比较?

    这个问题与生物学有关 所以对于那些知道氨基酸和密码子是什么的人来说 那就太棒了 对于那些不明白的人 我已尽力表述 以便您能够理解我在说什么 所以我有一个密码子列表 也可以称为3字母字符串 由以下四个字母的组合组成 A G C T 即AAT
  • 如何使用 jQuery 设置输入框的默认值?

    我想更改输入框的默认值 以便在重置表单时保留该值 我有以下代码 它使用 jQuery 设置一个值 但当按下重置时 该值将变为初始值
  • typescript 对 setState 与用户输入进行反应

    在这个打字稿反应 create react app 的基本示例中 我试图通过用户输入更改state name 有人可以向我展示一个工作示例 我没有找到 或更好的示例 文档在哪里 linter 的 第二个 错误是 54 24 错误 TS232
  • 为什么这个 Snowflake 查询不需要 LATERAL 关键字就可以工作?

    我在雪花中有这样的观点 create or replace view foo as select 1 as id foo 2 as sales from values 1 100 2 200 3 300 和这个用户定义的表函数 https
  • 使用混合模式重新创建 HSV 颜色

    我正在开发一个应用程序 该应用程序创建的图像的色调 饱和度和值根据不同的参数而变化 出于性能原因 单独渲染色调 饱和度和明度组件 然后使用 Photoshop 风格的混合模式 正片叠底 叠加 滤色 色调等 将它们合成在一起是有意义的 我已经
  • 如何使用squire模拟内联requirejs依赖项以进行单元测试?

    我将 requirejs 与内联需求一起使用 例如 define someDep function someDep return someFn function require anotherDep function anotherDep
  • 如何在 Angular 中设置默认页面

    当我请求包含以下 URL 的链接时 出现错误 http xxx 46630 或与此http crmbyzaid azurewebsites net 但当我添加时效果很好 index html 与网址 现在 当我请求时 我想设置部分页面 ap
  • 在 moment.js 中本地化日期和月份 [重复]

    这个问题在这里已经有答案了 如何在 moment js 中本地化当前日期和月份 没有年份 我想要的正是输出moment format LL 但没有年份部分 考虑以下示例 moment locale tr format LL 1 Hazira
  • 如何在单引号字符串中使用变量?

    如何回显单引号内的变量 echo test text here is some test text counter output gt gt FILE 变量在双引号字符串中扩展 但在单引号字符串中不扩展 name World echo He
  • 在设备驱动程序中使用 select()/poll()

    我有一个驱动程序 它可以处理多个 TCP 连接 有没有一种方法可以在给定列表的情况下执行类似于内核中用户空间应用程序 api 的 select poll epoll 的操作struct sock s Thanks 您可能想编写自己的自定义s
  • MATLAB 类对象未更新

    我正在编写一个简单的 MATLAB 类 它具有一些属性和一个方法 类的构造函数使用默认值初始化属性 类的方法在类被构造之后获得额外的输入以更新类属性 classdef classTest properties p1 p2 p3 p4 end
  • 如何使用 css 代码单独设置 gtk 小部件的样式

    在这之后GTK 将字体更改为旋转按钮 https stackoverflow com questions 47083294 gtk change font to spin button和这个为什么 CSS 样式没有应用于 GTK 代码 ht
  • 如何使用文本操作

    使用目的是什么文本动作 http docs oracle com javase 6 docs api javax swing text TextAction html from 抽象动作 http docs oracle com javas
  • 将cpp文件添加到cocos2d-x项目android项目中

    我已按照本教程进行操作http www raywenderlich com 33750 cocos2d x tutorial for ios and android getting started http www raywenderlic
  • Facebook Graph API:如何获取评论中的“来自”字段

    我有一个尚未发布的 Facebook 应用程序 测试模式 我使用页面访问令牌从我自己页面上特定帖子的评论中提取 来自 字段 但它返回空字段 这是我的图形 API 查询 gt post id comments fields from 当我使用
  • 给单元格着色 Google Chart - 散点图

    我在我的一个项目中使用谷歌图表 我需要使用以下代码为谷歌散点图中的一组单元格着色 我在用google visualization arrayToDataTable用于处理数据 以下是我的代码 div div
  • 在 Android 中使用 Service 作为单例

    创建一个不好的做法吗 Service作为单身人士工作 我的意思是一个Service它永远不会停止 并且包含一些其他引擎和Activities会使用 所以Service可能有类似的东西 public class CustomService e