Warning: file_get_contents(/data/phpspider/zhask/data//catemap/3/android/213.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Android 阻止活动在后台做某事_Android_Service_Background Process_Android Activity - Fatal编程技术网

Android 阻止活动在后台做某事

Android 阻止活动在后台做某事,android,service,background-process,android-activity,Android,Service,Background Process,Android Activity,我得到了以下场景: 我正在写一个应用程序,它就像一个聊天客户端。它在启动时连接到服务器并侦听消息(网络事务由服务处理)。 我的问题是在注销几秒钟后(相关方法向服务器发送信号,然后停止服务并调用finish()),应用程序似乎没有做任何事情就再次登录(我可以在服务器日志中看到这一点)。我不知道如何处理这个问题,我的意思是阻止我的应用程序在后台再次登录。 登录方法由在我的主活动的onCreate方法中创建的服务调用。我对android还不是很熟悉,我希望任何人都能给我一个提示。 提前谢谢 问候,,

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

问候,, 斯茅

编辑以添加代码: 我在logcat中发现,我收到一条消息,如“计划在xxxx毫秒内重新启动崩溃的服务” initNetwork方法和timer类被缩短,只有非常多的network stuff 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;
    }
公共类NetworkService扩展服务{
公共静态字符串路径;
静态ClientUserConfig myConfig;
私钥;
静态前端\u CS前端\u CS;
静态前端控制前端控制;
公共静态布尔runOnce=true;
私有字符串服务器\u ip=“10.0.2.2”;
私有静态PPAClientActivity主活动;
私有int-serverConnectionTimer;
私有hashedweeltimer;
private final LinkedList chatWindows=新建LinkedList();
类TimedChecksAndroid实现TimerTask{
公共无效运行(超时tmt){
字符串senderEmail;
字符串senderFullname;
链接列表;
int选择;
int chatNum;
ClientUserEntry用户;
如果(服务器连接计时器>=60){
}
@凌驾
公共IBinder onBind(意向){
//TODO自动生成的方法存根
返回null;
}
@凌驾
公共空间{
super.ondestory();
关闭服务();
if(主活动!=null){
主活动。显示消息(常量服务已停止);
}
}
私有网络关闭服务(){
Log.d(“SERVICENET”,“已关闭”);
if(NetworkService.front\u cs.getServer\u handler()!=null){
日志d(“SERVICENET”,“如果达到阻止签核”);
LinkedList=新建LinkedList();
添加(NetworkService.myConfig.getEmail());
NetworkService.front_cs.getServer_handler().sendMessage(新的UniversalContainerMessage(ppa.utils.Constants.cs_GOING_OFFLINE_操作码,列表));
}
}
@凌驾
public void onCreate(){
Log.d(“SERVICENET”,“服务创建已开始”);
super.onCreate();
path=getExternalFilesDir(null).getAbsolutePath().toString()+“/”;//TODO erzeugt manchmal nullpointer?
initNetwork();
if(主活动!=null){
主活动。显示消息(常量服务已启动);
}
}
专用网络(){
字符串fullname=null;
字符串email=null;
布尔值cfgBuildSuccess=true;
serverConnectionTimer=0;
计时器=新的HashedWheelTimer();
timer.newTimeout(new timedchecksaroid(),ppa.utils.Constants.CHATCLIENT\u CHECK\u INTERVAL,TimeUnit.ms);
//schedular=新的SchedularDialog(this,false,myConfig,front_cs);
}
公共字符串getPath(){
返回路径;
}
公共静态无效setMainActivity(PPAClientActivity活动){
主要活动=活动;
}

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

  • 服务从
    Context.startService()
    启动。要停止此类服务,您的活动应该调用
    stopService()
    ,或者服务本身应该调用
    stopSelf()
  • 服务从
    Context.bindService()
    启动。要停止绑定服务所有调用
    bindService()
    的活动应调用
    unbindService()
  • 当您通过方法1启动服务时,将调用服务中的
    onStartCommand()
    方法,因为您没有该方法,所以我假设您使用的是第二种方法。如果是这种情况,我猜不是所有活动都调用了
    unbindService()
    或有一个活动在服务停止后调用了
    bindService


    您可能需要查看示例以了解如何启动/停止服务。

    您是否使用了启动服务的广播接收器?如果您发布活动和服务中的代码,我们更有可能帮助您;-)我编辑了我的帖子并添加了重要的代码部分,但如果缺少某些内容,请告诉我