Skip to content
  • Categories
  • Recent
  • Tags
  • Popular
  • Users
  • Groups
  • Search
  • Get Qt Extensions
  • Unsolved
Collapse
Brand Logo
  1. Home
  2. Qt Development
  3. Mobile and Embedded
  4. Multiple instances of android application
Forum Update on Monday, May 27th 2025

Multiple instances of android application

Scheduled Pinned Locked Moved Unsolved Mobile and Embedded
5 Posts 3 Posters 490 Views
  • Oldest to Newest
  • Newest to Oldest
  • Most Votes
Reply
  • Reply as topic
Log in to reply
This topic has been deleted. Only users with topic management privileges can see it.
  • H Offline
    H Offline
    hexo
    wrote on last edited by
    #1

    I am trying to write an android application that opens PDF files (that is, it responds to PDF viewing intents). However, when I open the application while another instance is already open by clicking on a PDF file, the application crashes. It appears that the android version of Qt is not capable of handling multiple instances?
    Here is a minimal reproducible code sample:

    main.cpp file:

    
    #include <QApplication>
    #include <QPushButton>
    
    
    int main(int argc, char *argv[])
    {
        QApplication a(argc, argv);
        QWidget container;
        QPushButton button("Click me", &container);
        container.show();
        return a.exec();
    }
    

    AndroidManifest.xml file. This is the same as the default autogenerated manifest file by qt, except the intent-filters for PDF files:

    <?xml version="1.0"?>
    <manifest xmlns:android="http://schemas.android.com/apk/res/android"
        package="org.qtproject.example"
        android:installLocation="auto"
        android:versionCode="-- %%INSERT_VERSION_CODE%% --"
        android:versionName="-- %%INSERT_VERSION_NAME%% --">
        <!-- %%INSERT_PERMISSIONS -->
        <!-- %%INSERT_FEATURES -->
        <supports-screens
            android:anyDensity="true"
            android:largeScreens="true"
            android:normalScreens="true"
            android:smallScreens="true" />
        <application
            android:name="org.qtproject.qt.android.bindings.QtApplication"
            android:hardwareAccelerated="true"
            android:label="-- %%INSERT_APP_NAME%% --"
            android:requestLegacyExternalStorage="true"
            android:allowNativeHeapPointerTagging="false"
            android:allowBackup="true"
            android:fullBackupOnly="false">
            <activity
                android:name="org.qtproject.qt.android.bindings.QtActivity"
                android:configChanges="orientation|uiMode|screenLayout|screenSize|smallestScreenSize|layoutDirection|locale|fontScale|keyboard|keyboardHidden|navigation|mcc|mnc|density"
                android:label="-- %%INSERT_APP_NAME%% --"
                android:launchMode="singleTop"
                android:screenOrientation="unspecified"
                android:exported="true">
                <intent-filter>
                    <action android:name="android.intent.action.MAIN" />
                    <category android:name="android.intent.category.LAUNCHER" />
                </intent-filter>
    
                <intent-filter >
                    <action android:name="android.intent.action.OPEN_DOCUMENT" />
                    <category android:name="android.intent.category.DEFAULT" />
                    <data android:mimeType="application/pdf" />
                </intent-filter>
                <intent-filter >
                    <action android:name="android.intent.action.VIEW" />
                    <category android:name="android.intent.category.DEFAULT" />
                    <data android:mimeType="application/pdf" />
                </intent-filter>
    
              <meta-data
                    android:name="android.app.lib_name"
                    android:value="-- %%INSERT_APP_LIB_NAME%% --" />
    
              <meta-data
                    android:name="android.app.arguments"
                    android:value="-- %%INSERT_APP_ARGUMENTS%% --" />
    
                <meta-data
                    android:name="android.app.extract_android_style"
                    android:value="minimal" />
            </activity>
        </application>
    </manifest>
    
    

    If you open the app and then try to open another instance by clicking on a PDF file, it freezes and the only way to open it again is to close it from system menu. This blog post suggests setting android:launchMode:"singleInstance" in the manifest file, but it is only a partial solution, because even with that when opening a PDF file from another application (e.g. google drive or telegram) still a new version of the application is created and it still crashes.

    1 Reply Last reply
    0
    • H Offline
      H Offline
      hexo
      wrote on last edited by
      #2

      Should I open a feature request for this? Even the author of the previous blog mentions this in the next part of the series here:

      If the App was open, onNewIntent() from our customized Activity should be called, but Google Docs always calls onCreate() - doesn‘t matter if the Target App is already running or not. Then a white screen comes up, the App hangs and must be closed. The Debug Log reports:

      E Qt JAVA : Surface 2 not found!

      I haven‘t found a way to workaround this yet - perhaps anyone else has an idea HowTo fix ?

      That blog post was from 2018! I find it very surprising that there doesn't seem to be any discussion on this issue on the web. It seems like a pretty huge problem. Am I doing something wrong maybe?

      JoeCFDJ 1 Reply Last reply
      0
      • H hexo

        Should I open a feature request for this? Even the author of the previous blog mentions this in the next part of the series here:

        If the App was open, onNewIntent() from our customized Activity should be called, but Google Docs always calls onCreate() - doesn‘t matter if the Target App is already running or not. Then a white screen comes up, the App hangs and must be closed. The Debug Log reports:

        E Qt JAVA : Surface 2 not found!

        I haven‘t found a way to workaround this yet - perhaps anyone else has an idea HowTo fix ?

        That blog post was from 2018! I find it very surprising that there doesn't seem to be any discussion on this issue on the web. It seems like a pretty huge problem. Am I doing something wrong maybe?

        JoeCFDJ Offline
        JoeCFDJ Offline
        JoeCFD
        wrote on last edited by JoeCFD
        #3

        @hexo I have a small test program with poppler on Ubuntu.
        it works like the following:

            auto new_document = Poppler::Document::load( file_name );
            if ( nullptr == new_document ) { /* check open is ok first */
                std::cout << " can not open pdf file " << qPrintable( file_name ) <<std::endl;
                return;
            }
            closeDocument();  /* close it for other apps  */
        
           //use new_document
        

        no crash.

        H 1 Reply Last reply
        0
        • JoeCFDJ JoeCFD

          @hexo I have a small test program with poppler on Ubuntu.
          it works like the following:

              auto new_document = Poppler::Document::load( file_name );
              if ( nullptr == new_document ) { /* check open is ok first */
                  std::cout << " can not open pdf file " << qPrintable( file_name ) <<std::endl;
                  return;
              }
              closeDocument();  /* close it for other apps  */
          
             //use new_document
          

          no crash.

          H Offline
          H Offline
          hexo
          wrote on last edited by
          #4

          @JoeCFD This issue is specific to android. My application already works on linux/mac/windows with no problem.

          1 Reply Last reply
          0
          • A Offline
            A Offline
            Aliciasmith
            wrote on last edited by Aliciasmith
            #5
            This post is deleted!
            1 Reply Last reply
            0

            • Login

            • Login or register to search.
            • First post
              Last post
            0
            • Categories
            • Recent
            • Tags
            • Popular
            • Users
            • Groups
            • Search
            • Get Qt Extensions
            • Unsolved