一、launcher
有远程桌面client正连接着时,安装launcher.apk,无论是用android自带的资源管理器中安装,还是调用SDL_UpdateApp安装,安装完apk后,android自动运行新版本laucher,很快。这个新启动launcher会被android杀死。
没找到原因,但发现一个方法:若当前没有远程桌面client正连接着,这个安装后自动运行的新版本launcher不会被android杀死。
正是因为这方法,launcher源码,在实现升级时,调用SDL_UpdateApp前会执行instance->unregister_server(server_rdpd),目的是关闭所有正连接着client。这里关闭没用更直接的像RdpServer::CloseAllConnection(),是既然升级后肯定要退出原launcher,那不如简单、彻底地关server_rdpd服务。
但是,升级时遇到另一个问题。安装完后launcher.apk后,android随机会发生没有自动运行新版本launcher。测试下来,即使一直没有client连接着,也会出现这个问题。而在出问题时,android确定是调用了startActivity。
<aosp>/packages/apps/PackageInstaller/src/com/android/packageinstaller/InstallAppProgress.java ------ public class InstallAppProgress extends Activity implements View.OnClickListener, OnCancelListener { if (getIntent().getBooleanExtra("AutoInstall", false) && enabled) { // [leagor added] // copy from onClick(View v).v==mLaunchButton try { // 在出现随机没有自动运行新版本launcher时,也会进入这在 // 而且生成mLaunchIntent时用的mAppInfo.packageName是com.kos.launcher startActivity(mLaunchIntent); } catch (ActivityNotFoundException e) { Log.e(TAG, "Could not start activity", e); } clearCachedApkIfNeededAndFinish(); return; } else if (enabled) { mLaunchButton.setOnClickListener(InstallAppProgress.this); } else { mLaunchButton.setEnabled(false); } } }
没到找这问题原因。要是一直没解决,只能建议用户若是1分钟后,client还是无法连接,那重启设备。