2016-08-12 9 views
0

アプリを1つのインスタンスで実行することができません。私はそれを起動するためにアプリを押して、ホームボタンを押して、アプリを押して、新しいインスタンスを開始する前に、前のインスタンスが殺されていない別のインスタンスを開始します。アプリがロードされると、私はそれを閉じるためのボタンを背面押してから別のインスタンスは、右の最初の1を閉じた後にポップアップ表示...アンドロイドが別のアプリインスタンスを起動しないようにする

のAndroidManifest.xml

<activity 
    android:name=".StartUpActivity" 
    android:configChanges="orientation|screenSize" 
    android:label="@string/app_name" 
    android:noHistory="true" 
    android:launchMode="singleTask"> 
    <intent-filter> 
     <action android:name="android.intent.action.MAIN" /> 

     <category android:name="android.intent.category.LAUNCHER" /> 
    </intent-filter> 
</activity> 

StartUpActivity

@Override 
protected void onCreate(Bundle savedInstanceState) { 
    super.onCreate(savedInstanceState); 
    setContentView(R.layout.activity_loading); 

    new Thread(new Runnable() { 
     @Override 
     public void run() { 
      Intent activityIntent; 
      // DO STUFF 
      activityIntent = new Intent(context, RegNewUser.class); 
      startActivity(activityIntent); 
     } 
    }).start(); 
} 
+0

「アプリの別のインスタンスを起動するアンドロイドの防止」 - あなたの* app *インスタンスは1つだけです。 * activity *のインスタンスが複数存在する可能性があります。アクティビティはアプリではありません。 – CommonsWare

答えて

3

新しいアクティビティを開始するために新しいスレッドを作成しないでください。このコードは、UIスレッドで実行する必要があります。

@Override 
protected void onCreate(Bundle savedInstanceState) { 
    super.onCreate(savedInstanceState); 
    setContentView(R.layout.activity_loading); 


    Intent activityIntent; 
    activityIntent = new Intent(context, RegNewUser.class); 
    startActivity(activityIntent); 

} 
+0

AsyncTaskの 'OnPostExecute'の中で新しいアクティビティを開始するといいですか? – PYPL

+0

それははるかに良いです。しかし、スレッドとUIスレッドの間に「通信チャネル」を作成することをお勧めします。たとえば、ハンドラhttps://developer.android.com/training/multiple-threads/communicate-ui.htmlを使用することができます – Lino

関連する問題