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

JBM*_*nes 26 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);          
    }
}
Run Code Online (Sandbox Code Playgroud)

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

Lal*_*ani 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;
}
Run Code Online (Sandbox Code Playgroud)


小智 5

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

下面,我添加了一个完整工作示例的链接(以 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

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

该项目对于跨不同应用程序进行 IPC 的重构也很有用。

该项目还被开发为当Android重新启动时自动启动(前提是该应用程序在安装后至少运行过一个并且该应用程序未安装在SD卡上)。

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

该代码的编写方式使得可以很容易地进行调整以模拟预定服务。

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

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