【问题标题】:How to run an android app in background?如何在后台运行android应用程序?
【发布时间】:2012-01-27 04:37:18
【问题描述】:

此代码将在系统启动后自动运行应用程序,但按下后退按钮后应用程序将关闭。

如果应用程序通过单击它的图标可以正常运行。即使按下后退按钮或运行其他应用程序,它也会继续运行。

public class AutoBoot extends BroadcastReceiver {
    @Override        
    public void onReceive(Context context, Intent intent) {                
        Intent i = new Intent(context, MyActivity.class); 
        i.addFlags(Intent.FLAG_ACTIVITY_NEW_TASK);
        context.startActivity(i);          
    }
}

我的问题是,如何让这个自动运行代码即使在按下后退按钮或运行其他应用程序后也能持续运行?

【问题讨论】:

    标签: android android-service


    【解决方案1】:

    如果您希望您的应用程序在后台运行,您可以在此处启动Service。这就是 Android 中 Service 的用途 - 在后台运行并进行长时间操作。

    UDPATE

    您可以使用START_STICKY 使您的服务持续运行。

    @Override
    public int onStartCommand(Intent intent, int flags, int startId) {
        handleCommand(intent);
        // We want this service to continue running until it is explicitly
        // stopped, so return sticky.
        return START_STICKY;
    }
    

    【讨论】:

    • 如何明确停止
    • 另外,重启后如何启动服务?
    • 电池耗尽的几率很高,如何解决这个电池耗尽的问题?
    【解决方案2】:

    启动 Activity 不是这种行为的正确方法。相反,让您的 BroadcastReceiver 使用一个意图来启动一个服务,该服务可以尽可能长时间地继续运行。 (见http://developer.android.com/reference/android/app/Service.html#ProcessLifecycle

    另见Persistent service

    【讨论】:

      【解决方案3】:

      因为应用程序无论如何都在后台运行。我假设您真正要问的是如何让应用程序在后台执行操作。下面的解决方案将使您的应用在打开应用后和系统重新启动后在后台执行操作。

      下面,我添加了一个完整工作示例的链接(以 Android Studio 项目的形式)

      这个主题似乎超出了 Android 文档的范围,而且似乎没有任何关于此的全面文档。这些信息分布在几个文档中。

      以下文档间接告诉您如何执行此操作: https://developer.android.com/reference/android/app/Service.html

      https://developer.android.com/reference/android/content/BroadcastReceiver.html

      https://developer.android.com/guide/components/bound-services.html

      为了让您的使用要求正确,请仔细阅读上述文档的重要部分:#Binder、#Messenger 和下面的组件链接:

      https://developer.android.com/guide/components/aidl.html

      这是一个完整工作示例的链接(Android Studio 格式):https://developersfound.com/BackgroundServiceDemo.zip

      这个项目将启动一个绑定到服务的活动;实施 AIDL。

      这个项目对于跨不同应用的 IPC 重构也很有用。

      这个项目也被开发为在Android重启时自动启动(前提是应用程序安装后至少运行过一次并且应用程序没有安装在SD卡上)

      当此应用/项目在重新启动后运行时,它会动态使用透明视图,使其看起来好像没有任何应用启动,但相关应用的服务可以正常启动。

      这段代码的编写方式很容易调整以模拟预定服务。

      该项目是根据上述文档开发的,随后是一个干净的解决方案。

      然而,这个项目的一部分并不干净:我还没有找到一种方法来在不使用 Activity 的情况下在重新启动时启动服务。如果你们中的任何人阅读这篇文章有一个干净的方式来做到这一点,请发表评论。

      【讨论】:

      • 谢谢 - 我对学习这个非常感兴趣。我在 Android Studio 中开发 Android 应用程序已经快 1 年了。我下载了您的 zip,将其放在一个目录中,在 Android Studio 中打开了该目录,并在构建时收到此错误。错误:配置项目“:app”时出现问题。 > 无法解析配置“:app:_debugApkCopy”的所有依赖项。 > 找不到 com.android.support.constraint:constraint-layout:1.0.2。要求:项目:app
      • 我猜当约束布局依赖项不在您的 gradle 文件中时,您的布局之一正在使用约束布局。如果不是这种情况,请将布局文件中的约束布局更改为普通布局,如果布局中存在与约束布局相关的任何属性,也将其删除。
      • 当新的 gradle 版本出现时,通常会出现迁移问题。处理此问题的最佳方法是创建一个具有相同包名的新项目并分别迁移项目文件。很抱歉给您带来不便。该应用程序经过全面测试,因此可以正常工作。
      猜你喜欢
      • 2022-01-16
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2012-09-06
      • 1970-01-01
      • 2022-11-23
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多