Java 在后台运行活动

Java 在后台运行活动,java,android,Java,Android,我有一个向数据库发送一些详细信息的活动,但当我单击“上一步”按钮时,它停止了。 有可能让它在后台运行吗?我听说使用服务可以解决这个问题,但由于我所有的课程都是作为活动编写的,我想知道这是否可能。 这不能用onStop方法上的一些代码来完成吗?您提到所有类都是作为活动编写的,我假设这意味着您的应用程序逻辑嵌入了用户界面逻辑。这通常不是一个好的做法-您应该尝试将特定于应用程序的代码迁移到单独的类中。通过在用户界面之外使用此功能,您的应用程序将在许多方面受益 要回答您的问题,可以通过子类化服务让应用程

我有一个向数据库发送一些详细信息的活动,但当我单击“上一步”按钮时,它停止了。 有可能让它在后台运行吗?我听说使用服务可以解决这个问题,但由于我所有的课程都是作为活动编写的,我想知道这是否可能。
这不能用onStop方法上的一些代码来完成吗?

您提到所有类都是作为活动编写的,我假设这意味着您的应用程序逻辑嵌入了用户界面逻辑。这通常不是一个好的做法-您应该尝试将特定于应用程序的代码迁移到单独的类中。通过在用户界面之外使用此功能,您的应用程序将在许多方面受益


要回答您的问题,可以通过子类化
服务
让应用程序在后台执行功能。请看一个很好的解释。

您提到所有类都是作为活动编写的,我假设这意味着您的应用程序逻辑嵌入了用户界面逻辑。这通常不是一个好的做法-您应该尝试将特定于应用程序的代码迁移到单独的类中。通过在用户界面之外使用此功能,您的应用程序将在许多方面受益


要回答您的问题,可以通过子类化
服务
让应用程序在后台执行功能。请看一个很好的解释。

您应该编写一个服务,该活动使用意图与之通信。因此,它应该将数据发送到服务,以便发送到数据库,然后服务可以通知活动。当活动侦听来自服务的事件时,您正在实现观察者模式(Java和Android以及许多其他事件处理系统中的侦听器)


您也可以轮询服务,但这不是获取状态更新的首选模式。

您应该编写一个服务,该活动使用意图与之通信。因此,它应该将数据发送到服务,以便发送到数据库,然后服务可以通知活动。当活动侦听来自服务的事件时,您正在实现观察者模式(Java和Android以及许多其他事件处理系统中的侦听器)

您也可以轮询服务,但这不是获取状态更新的首选模式。

创建扩展服务类型的新类。 添加必要的覆盖

@Override
public IBinder onBind(Intent intent)
{
    // TODO Auto-generated method stub
    return null;
}

@Override
public int onStartCommand(Intent intent, int flags, int startId)
{
    //this service will run until we stop it
            // This will execute when the service starts


    return START_STICKY; //makes it sticky to keep it on until its destroyd
}

@Override
public void onDestroy()
{
    super.onDestroy();
            // when the service is destroyd
}
您可以通过以下方式启动服务:

stopService(new Intent(getBaseContext(), ServiceClassName.class));
stopService(new Intent(getBaseContext(), ServiceClassName.class));
您可以通过以下方式停止服务:

stopService(new Intent(getBaseContext(), ServiceClassName.class));
stopService(new Intent(getBaseContext(), ServiceClassName.class));
希望这有帮助:)

创建扩展服务类型的新类。 添加必要的覆盖

@Override
public IBinder onBind(Intent intent)
{
    // TODO Auto-generated method stub
    return null;
}

@Override
public int onStartCommand(Intent intent, int flags, int startId)
{
    //this service will run until we stop it
            // This will execute when the service starts


    return START_STICKY; //makes it sticky to keep it on until its destroyd
}

@Override
public void onDestroy()
{
    super.onDestroy();
            // when the service is destroyd
}
您可以通过以下方式启动服务:

stopService(new Intent(getBaseContext(), ServiceClassName.class));
stopService(new Intent(getBaseContext(), ServiceClassName.class));
您可以通过以下方式停止服务:

stopService(new Intent(getBaseContext(), ServiceClassName.class));
stopService(new Intent(getBaseContext(), ServiceClassName.class));


希望这有帮助:)

您必须重写onBackPressed方法才能执行您想要的操作。如果您想“隐藏”活动(以便用户看到它“关闭”),您可以调用该方法。

您必须重写onBackPressed方法以执行您想要的操作。如果要“隐藏”活动(以便用户看到它“关闭”),可以调用该方法。

否,桌面应该很快,因此不能在其中继续处理。如果您有长时间运行的流程,您应该将它们放在后台,但是您也应该仅将活动用于用户交互流程。迁移到
服务
并不困难,值得付出努力。您正在寻找该服务。查看本教程,让我们假设我的应用程序是某种计时器。。我想在后台运行它,但是当用户重新打开它时,他应该会看到它,这是一个活动。。我如何分割它?什么是服务,什么是活动?不,桌面应该很快,所以你不能在那里继续处理。如果您有长时间运行的流程,您应该将它们放在后台,但是您也应该仅将活动用于用户交互流程。迁移到
服务
并不困难,值得付出努力。您正在寻找该服务。查看本教程,让我们假设我的应用程序是某种计时器。。我想在后台运行它,但是当用户重新打开它时,他应该会看到它,这是一个活动。。如何拆分?什么是服务,什么是活动?应用程序将在“moveTaskToBack”之后继续运行?您应该测试用于db写入的“后台”代码。至少它会在隐藏之前保留状态。我应该使用super.onBackPressed()吗?我想不会,因为这是杀死我的应用程序的方法,我想是吧?是的,不要调用super,因为它会杀死你的活动。看起来它仍然在停止我的活动=\n应用程序将在“moveTaskToBack”之后继续运行?你应该测试用于db写入的“后台”代码。至少它会在隐藏之前保留状态。我应该使用super.onBackPressed()吗?我想不会,因为这是杀死我的应用程序的方法,我想是吧?是的,不要调用super,因为它会杀死你的活动。看起来它仍然在停止我的活动=\