如何在后台运行Android应用程序?

时间:2012-01-27 04:37:18

标签: android android-service

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

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

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);          
    }
}

我的问题是,即使按下后退按钮或运行其他应用程序,如何使此自动运行代码继续运行?

3 个答案:

答案 0 :(得分:17)

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

<强> 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;
}

答案 1 :(得分:4)

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

另见Persistent service

答案 2 :(得分:4)

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

下面,我添加了一个完整工作示例的链接(以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格式):http://developersfound.com/BackgroundServiceDemo.zip

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

此项目对于在不同应用程序中重新考虑IPC的目的也很有用。

此项目也开发为在Android重启时自动启动(假设应用程序在安装后至少运行一次,并且SD卡上未安装应用程序)

当此应用程序/项目在重新启动后运行时,它会动态使用透明视图,使其看起来没有应用程序启动,但相关应用程序的服务启动干净。

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

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

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