Warning: file_get_contents(/data/phpspider/zhask/data//catemap/3/android/228.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后台服务类“;onStartCommand";方法不会在设备启动时执行其中的所有代码_Android_Multithreading_Android Broadcastreceiver_Background Service - Fatal编程技术网

Android后台服务类“;onStartCommand";方法不会在设备启动时执行其中的所有代码

Android后台服务类“;onStartCommand";方法不会在设备启动时执行其中的所有代码,android,multithreading,android-broadcastreceiver,background-service,Android,Multithreading,Android Broadcastreceiver,Background Service,我有一个后台服务,我可以启动或停止使用应用程序菜单。 此服务也可以在模拟器设备启动时启动。但奇怪的是,我只在设备启动时看到toast消息,而jobThread没有启动。。。即使我从菜单中触发。。我仍然只看到祝酒词 但如果我重新启动AndrodiStudio,运行应用程序并从菜单启动服务,它就可以正常工作。。似乎当设备重新启动时,onStartCommand中的代码仅部分被删除。怎么了 ..taskThread只调用将消息打印到logcat的同一calss(this)服务类中的一个方法 在我的服务

我有一个后台服务,我可以启动或停止使用应用程序菜单。 此服务也可以在模拟器设备启动时启动。但奇怪的是,我只在设备启动时看到toast消息,而jobThread没有启动。。。即使我从菜单中触发。。我仍然只看到祝酒词

但如果我重新启动AndrodiStudio,运行应用程序并从菜单启动服务,它就可以正常工作。。似乎当设备重新启动时,
onStartCommand
中的代码仅部分被删除。怎么了

..taskThread只调用将消息打印到logcat的同一calss(this)服务类中的一个方法

在我的服务类中:

@Override
public int onStartCommand(Intent intent, int flags, int startId) {
    serviceRunning = true;
    Toast.makeText(this,"onStartCommand!...Service Started", Toast.LENGTH_LONG).show();
    Thread taskThread = new Thread(new finalRunnableInnerClass(startId));
    taskThread.start(); 
    return START_STICKY;
}

当我们处理必须在启动时启动的应用程序时,我们注意到最初的日志消息并没有写入设备的日志缓冲区。经过一些调查,我们得出结论,
Log
类的方法在启动后需要一段时间才能发挥作用

因此,如果新线程正在运行的唯一指示只是logcat中的一条消息,那么可能是线程运行正常,但日志消息根本没有显示出来


通过添加将日志写入文件的功能,我们解决了启动后调试问题。任何时候我们想要测试开机后功能,我们都会使用
WRITE_LOGS_to_FILE
标志集编译代码,然后从设备中提取带有日志的文件。

谢谢您的回答!是的,事实就是这样,而且是真的!。我的线程运行良好!。我通过将此代码放入backgroundService线程的run()方法中确认了这一点

Handler=newhandler(Looper.getMainLooper());
handler.post(新的Runnable(){
@凌驾
public void run(){Toast.makeText(getApplicationContext(),“running”,Toast.LENGTH_SHORT).show();
}
});