gpt4 book ai didi

android - 防止 Activity 在后台做某事

转载 作者:太空狗 更新时间:2023-10-29 14:28:51 26 4
gpt4 key购买 nike

我遇到了以下情况:我正在编写一个应用程序,它就像一个聊天客户端。它在启动时连接到服务器并正在监听消息(网络事物由服务处理)。我的问题是在注销后几秒钟(相关方法向服务器发送信号,然后停止服务并调用 finish()),应用程序似乎在没有执行任何操作的情况下再次登录(我可以在服务器日志中看到这一点).我不确定如何处理这个问题,我的意思是阻止我的应用程序在后台再次登录。登录方法由在我的主要 Activity 的 onCreate 方法中创建的服务调用。我对android还不是很熟悉,希望有人能给我提示。提前致谢。

问候,毛

编辑代码添加:我在 logcat 中发现我收到一条消息,如“计划在 xxxx 毫秒内重启崩溃的服务”initNetwork 方法和计时器类被缩短,只有非常多的网络内容 id 不想由于自动服务重启而自动执行。

public class NetworkService extends Service {

public static String path;
static ClientUserConfig myConfig;
private ChatKeys keys;

static Frontend_CS front_cs;
static Frontend_CK front_ck;

public static Boolean runOnce = true;

private String server_ip = "10.0.2.2";

private static PPAClientActivity MAIN_ACTIVITY;
private int serverConnectionTimer;

private HashedWheelTimer timer;

private final LinkedList<String> chatWindows = new LinkedList<String>();


class TimedChecksAndroid implements TimerTask {

public void run(Timeout tmt) {
String senderEmail;
String senderFullname;
LinkedList<String> list;
int selection;
int chatNum;

ClientUserEntry user;

if (serverConnectionTimer>=60){



}





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

super.onDestroy();


shutdownService();

if (MAIN_ACTIVITY != null) {
MAIN_ACTIVITY.showMessages(Consts.SERVICE_STOPPED);
}
}

private void shutdownService() {

Log.d("SERVICENET", "Shutdown reached.");

if(NetworkService.front_cs.getServer_handler() != null) {
Log.d("SERVICENET", "IF Block Sign OFF reached.");
LinkedList<String> list = new LinkedList<String>();
list.add(NetworkService.myConfig.getEmail());
NetworkService.front_cs.getServer_handler().sendMessage(new UniversalContainerMessage(ppa.utils.Constants.CS_GOING_OFFLINE_OPCODE,list));
}

}
@Override
public void onCreate() {

Log.d("SERVICENET", "Service creation started.");

super.onCreate();

path = getExternalFilesDir(null).getAbsolutePath().toString() + "/"; // TODO erzeugt manchmal nullpointer?


initNetwork();

if (MAIN_ACTIVITY != null) {
MAIN_ACTIVITY.showMessages(Consts.SERVICE_STARTED);
}

}



private void initNetwork() {

String fullname = null;
String email = null;
boolean cfgBuildSuccess = true;



serverConnectionTimer = 0;
timer = new HashedWheelTimer();
timer.newTimeout(new TimedChecksAndroid(), ppa.utils.Constants.CHATCLIENT_CHECK_INTERVAL, TimeUnit.MILLISECONDS);
//schedular = new SchedularDialog(this, false, myConfig, front_cs);

}

public String getPath() {
return path;
}

public static void setMainActivity(PPAClientActivity activity) {
MAIN_ACTIVITY = activity;
}

最佳答案

启动/停止服务有两种方法。

  1. 服务从 Context.startService() 开始。要停止此类服务,您的 Activity 应调用 stopService() 或服务本身应调用 stopSelf()
  2. 服务从 Context.bindService() 开始。要停止绑定(bind)服务ALL,调用bindService() 的 Activity 应调用unbindService()

当您通过方法 1 启动服务时,服务中的 onStartCommand() 方法将被调用,由于您没有,我假设您使用的是第二种方法。如果是这种情况,我的猜测是不是您的所有 Activity 都调用了 unbindService(),或者有一个 Activity 在服务停止后调用了 bindService

您可能需要检查 Service API例如如何启动/停止服务。

关于android - 防止 Activity 在后台做某事,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/8973655/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com