我有一个后台服务,我可以使用应用程序菜单启动或停止该服务。该服务也可以在模拟器设备启动时启动。但奇怪的是,我只在设备启动时看到 toast 消息,而 jobThread 没有启动......即使我从菜单中触发......我仍然只看到 toast 消息。
但是,如果我重新启动 AndrodiStudio,并运行应用程序并从菜单启动服务,它工作正常.. 似乎 onStartCommand
中的代码在设备重新启动时仅部分执行。怎么了?
..taskThread 只是调用同一个 calss (this) 服务类中的一个方法,将消息打印到 logcat。
在我的服务类中:
@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
标志,然后从设备中提取包含日志的文件。
Tôi là một lập trình viên xuất sắc, rất giỏi!