我正在编写一个启动加载程序,我已经掌握了大部分细节,但我不确定为什么有些启动加载程序会在开始大量执行之前将它们重新定位在内存中.
有谁能解释一下?
此行为的一个示例是原始的v0.01 Linux内核引导加载程序,其中包含以下注释:
boot.s由bios-startup例程加载到0x7c00,并自行移动到地址0x90000,并跳转到那里.
即使我持有唤醒锁并且我已经调用了startForeground,我遇到的问题是我的服务被杀死了.当平板电脑(华硕Transformer TF101)发生这种情况时,停止服务而不调用onDestroy.没有其他可见的应用程序,日志cat没有显示任何异常(没有'内存不足'消息等).被杀后,服务立即重新启动.
我正在开发的应用程序是一个聊天客户端,需要一个持续的连接,它也是基于插件的,所以我的应用程序是这样开发的:客户端 - 主机服务 - 多个子服务'.
主机服务是粘滞的,包含唤醒锁并调用startForeground(并显示通知),子服务不粘,不保持唤醒锁并且是后台服务.
如果客户端本身是打开的,则问题不会发生,但我要使用的模型是用户可以使用设备并保持连接(接收消息等),而无需始终打开客户端本身.
任何人都可以提供任何解释为什么服务以这种方式被杀死,如果是这样,防止它发生?当聊天客户端显示用户登录和注销时,并且服务死亡会终止所有打开的连接,这会使聊天客户端"反弹".目前,它似乎发生在每15到45分钟之间.
此外,如果有人知道一种方法来保持套接字连接打开而不保持整个连接持续时间的唤醒锁定,我很乐意听到它!
主机服务源的修剪测试用例版本如下.
public class HostService extends Service
{
PowerManager m_powerManager = null;
PowerManager.WakeLock m_wakeLock = null;
@Override
public IBinder onBind( Intent intent )
{
return m_serviceImplementation;
}
@Override
public void onCreate()
{
super.onCreate();
}
@Override
public void onDestroy()
{
if( m_wakeLock != null )
{
m_wakeLock.release();
m_wakeLock = null;
}
stopForeground( true );
super.onDestroy();
}
@Override
public int onStartCommand( Intent intent, int flags, int startId ) …Run Code Online (Sandbox Code Playgroud) 我试图将一个可以采用任意帧并使用ffmpeg 3.3.3 API构建视频的类放在一起.我一直在努力为此找到一个很好的例子,因为示例似乎仍然使用已弃用的函数,所以我试图使用头文件中的文档并通过引用一些似乎正在使用的github repos来修补它新版本.
如果我使用av_interleaved_write_frame将编码数据包写入输出,则ffprobe输出以下内容:
[mov,mp4,m4a,3gp,3g2,mj2 @ 0000000002760120] moov atom not found0
X:\Diagnostics.mp4: Invalid data found when processing input
Run Code Online (Sandbox Code Playgroud)
ffplay无法播放使用此方法生成的文件.
如果我改为将其交换为对avio_write的调用,则ffprobe输出:
Input #0, h264, from 'X:\Diagnostics.mp4':
Duration: N/A, bitrate: N/A
Stream #0:0: Video: h264 (Main), yuv420p(progressive), 672x380 [SAR 1:1 DAR 168:95], 25 fps, 25 tbr, 1200k tbn, 50 tbc
Run Code Online (Sandbox Code Playgroud)
ffplay可以主要播放这个文件,直到它结束,当它输出:
Input #0, h264, from 'X:\Diagnostics.mp4': 0KB sq= 0B f=0/0
Duration: N/A, bitrate: N/A
Stream #0:0: Video: h264 (Main), yuv420p(progressive), 672x380 [SAR 1:1 DAR 168:95], 25 fps, 25 tbr, …Run Code Online (Sandbox Code Playgroud) android ×1
assembly ×1
bios ×1
bootloader ×1
ffmpeg ×1
java ×1
libavcodec ×1
system ×1
x264 ×1