我可以 运行 无限期地在 Android 中使用后台线程吗?

Can I run a background thread in Android indefinitely?

我正在构建一个 android 应用程序,它将 运行 作为微控制器上的独立应用程序。

我必须在我的应用程序中添加一个后台线程来执行某些任务并且无限期地每 20 毫秒调用一次。 运行在我的应用程序中,我收到以下警告。

I/ample.app: Background concurrent copying GC freed 3461(211KB) AllocSpace objects, 36(1872KB) LOS objects, 49% free, 2MB/4MB, paused 509us total 104.562ms 

I/ample.app: Background concurrent copying GC freed 7921(410KB) AllocSpace objects, 36(1872KB) LOS objects, 49% free, 1933KB/3MB, paused 2.204ms total 109.949ms 

I/ample.app: Background concurrent copying GC freed 2823(175KB) AllocSpace objects, 32(1664KB) LOS objects, 49% free, 2022KB/3MB, paused 1.047ms total 104.209ms 

I/ample.app: Background concurrent copying GC freed 2758(176KB) AllocSpace objects, 36(1872KB) LOS objects, 50% free, 1918KB/3MB, paused 550us total 101.114ms 

I/ample.app: Background concurrent copying GC freed 2725(177KB) AllocSpace objects, 32(1664KB) LOS objects, 50% free, 1918KB/3MB, paused 503us total 102.727ms 

I/ample.app: Background concurrent copying GC freed 2717(161KB) AllocSpace objects, 32(1664KB) LOS objects, 49% free, 1918KB/3MB, paused 502us total 114.887ms 

I/ample.app: Background concurrent copying GC freed 2592(144KB) AllocSpace objects, 32(1664KB) LOS objects, 49% free, 1918KB/3MB, paused 492us total 101.373ms 

I/ample.app: Background concurrent copying GC freed 2724(176KB) AllocSpace objects, 32(1664KB) LOS objects, 50% free, 2022KB/3MB, paused 504us total 106.705ms 

I/ample.app: Background concurrent copying GC freed 2880(176KB) AllocSpace objects, 36(1872KB) LOS objects, 50% free, 1918KB/3MB, paused 501us total 101.745ms 

I/ample.app: Background concurrent copying GC freed 2599(161KB) AllocSpace objects, 32(1664KB) LOS objects, 50% free, 1918KB/3MB, paused 1.229ms total 107.834ms 

I/ample.app: Background concurrent copying GC freed 2855(193KB) AllocSpace objects, 32(1664KB) LOS objects, 49% free, 1918KB/3MB, paused 503us total 119.165ms 

I/ample.app: Background concurrent copying GC freed 2594(160KB) AllocSpace objects, 32(1664KB) LOS objects, 49% free, 1918KB/3MB, paused 689us total 117.995ms 

I/ample.app: Background concurrent copying GC freed 2470(176KB) AllocSpace objects, 32(1664KB) LOS objects, 49% free, 1918KB/3MB, paused 502us total 107.202ms 

I/ample.app: Background concurrent copying GC freed 2744(160KB) AllocSpace objects, 32(1664KB) LOS objects, 50% free, 1918KB/3MB, paused 504us total 114.165ms 

I/ample.app: Background concurrent copying GC freed 3100(177KB) AllocSpace objects, 32(1664KB) LOS objects, 50% free, 1918KB/3MB, paused 507us total 106.392ms 

I/ample.app: Background concurrent copying GC freed 2722(177KB) AllocSpace objects, 32(1664KB) LOS objects, 49% free, 1918KB/3MB, paused 501us total 112.687ms 

I/ample.app: Background concurrent copying GC freed 2719(177KB) AllocSpace objects, 32(1664KB) LOS objects, 49% free, 1918KB/3MB, paused 596us total 102.322ms 

I/ample.app: Background concurrent copying GC freed 2594(160KB) AllocSpace objects, 32(1664KB) LOS objects, 49% free, 1918KB/3MB, paused 586us total 112.978ms 

I/ample.app: Background concurrent copying GC freed 2842(161KB) AllocSpace objects, 32(1664KB) LOS objects, 49% free, 1918KB/3MB, paused 603us total 110.437ms 

D/QueuedWork: waited: [<1: 0, <2: 111, <4: 30, <8: 147, <16: 712, <32: 24, <64: 0, <128: 0, <256: 0, <512: 0, <1024: 0, <2048: 0, <4096: 0, <8192: 0, <16384: 0, >=16384: 0] 

可以忽略这些警告吗?尽管我的应用程序目前运行良好,但我担心在某些时候此警告可能会导致我的应用程序崩溃。

如有任何帮助,我们将不胜感激。 谢谢

Android 确实不适合微控制器 OS。最重要的是你想要稳定。 Android 不会给你 - OS 可以随时终止任何进程以获取资源。如您所见,另一个问题是垃圾回收。这可能随时发生并阻塞任何或所有线程。如果您需要快速响应硬件事件,您不想使用垃圾收集语言——您想要的是您可以确保永远不会被阻止的东西。我会重新考虑这种方法。

在普通应用中,只要您没有看到性能问题,我会说您看到的 GC 事件是正常的。但是对于微控制器,你肯定会因此而丢失事件。除非你 运行 内存不足,否则你不会因为这些而崩溃,但它们可以延迟一切。