diff --git a/renderdoc/core/replay_proxy.cpp b/renderdoc/core/replay_proxy.cpp
index da72fb7fae..5f32c94343 100644
--- a/renderdoc/core/replay_proxy.cpp
+++ b/renderdoc/core/replay_proxy.cpp
@@ -246,6 +246,7 @@ ReplayProxy::ReplayProxy(ReadSerialiser &reader, WriteSerialiser &writer, IRepla
m_Proxy(proxy),
m_Remote(NULL),
m_Replay(NULL),
+ m_PreviewWindow(NULL),
m_RemoteServer(false)
{
m_StructuredFile = new SDFile;
diff --git a/renderdoccmd/CMakeLists.txt b/renderdoccmd/CMakeLists.txt
index 94a5158e9e..19267ec3ff 100644
--- a/renderdoccmd/CMakeLists.txt
+++ b/renderdoccmd/CMakeLists.txt
@@ -224,6 +224,7 @@ if(ANDROID)
# Copy in android package files, replacing the package name with the architecture-specific package name
configure_file(android/Loader.java ${CMAKE_CURRENT_BINARY_DIR}/src/org/renderdoc/renderdoccmd/Loader.java)
+ configure_file(android/DummyService.java ${CMAKE_CURRENT_BINARY_DIR}/src/org/renderdoc/renderdoccmd/DummyService.java)
configure_file(android/AndroidManifest.xml ${CMAKE_CURRENT_BINARY_DIR}/AndroidManifest.xml)
configure_file(android/icon.png ${CMAKE_CURRENT_BINARY_DIR}/res/drawable/icon.png COPYONLY)
diff --git a/renderdoccmd/android/AndroidManifest.xml b/renderdoccmd/android/AndroidManifest.xml
index 81be33408a..f3e2bac896 100644
--- a/renderdoccmd/android/AndroidManifest.xml
+++ b/renderdoccmd/android/AndroidManifest.xml
@@ -7,7 +7,8 @@
-
+
+
@@ -15,7 +16,9 @@
-
+
+
+
diff --git a/renderdoccmd/android/DummyService.java b/renderdoccmd/android/DummyService.java
new file mode 100644
index 0000000000..3ecb70a334
--- /dev/null
+++ b/renderdoccmd/android/DummyService.java
@@ -0,0 +1,48 @@
+package @RENDERDOC_ANDROID_PACKAGE_NAME@;
+import android.app.Notification;
+import android.content.Intent;
+import android.os.Binder;
+import android.os.Handler;
+import android.os.HandlerThread;
+import android.os.IBinder;
+import android.os.Looper;
+import android.os.Message;
+import android.os.Process;
+
+public class DummyService extends android.app.Service
+{
+ private Looper serviceLooper;
+ private Handler serviceHandler;
+
+ @Override
+ public void onCreate() {
+ HandlerThread thread = new HandlerThread("DummyServiceThread", Process.THREAD_PRIORITY_BACKGROUND);
+ thread.start();
+
+ serviceLooper = thread.getLooper();
+ serviceHandler = new Handler(serviceLooper);
+ }
+
+ @Override
+ public int onStartCommand(Intent intent, int flags, int startId) {
+ Notification notification = new Notification.Builder(this)
+ .setPriority(Notification.PRIORITY_LOW)
+ .setSmallIcon(R.drawable.icon)
+ .setContentTitle("RenderDoc Dummy Foreground Service")
+ .setContentText("RenderDoc needs this dummy foreground service to prevent cached app freezer from interrupting the network connection")
+ .build();
+ startForeground(startId, notification);
+
+ // If we get killed, don't restart
+ return START_NOT_STICKY;
+ }
+
+ @Override
+ public IBinder onBind(Intent intent) {
+ return null;
+ }
+
+ @Override
+ public void onDestroy() {
+ }
+}
\ No newline at end of file
diff --git a/renderdoccmd/android/Loader.java b/renderdoccmd/android/Loader.java
index a97ec49dff..7c3a186cba 100644
--- a/renderdoccmd/android/Loader.java
+++ b/renderdoccmd/android/Loader.java
@@ -1,9 +1,11 @@
package @RENDERDOC_ANDROID_PACKAGE_NAME@;
-import android.os.Build;
import android.app.Activity;
-import android.view.WindowManager;
-import android.os.Environment;
+import android.content.Context;
import android.content.Intent;
+import android.os.Build;
+import android.os.Environment;
+import android.os.PowerManager;
+import android.view.WindowManager;
public class Loader extends android.app.NativeActivity
{
@@ -17,6 +19,11 @@ protected void onCreate(android.os.Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
getWindow().addFlags(WindowManager.LayoutParams.FLAG_KEEP_SCREEN_ON);
+ Context context = getApplicationContext();
+ if(context != null) {
+ context.startService(new Intent(this, DummyService.class));
+ }
+
// if we're running on something older than Android M (6.0), return now
// before requesting permissions as it's not supported
if(Build.VERSION.SDK_INT < Build.VERSION_CODES.M)