2016-08-12 107 views
0

我无法让我的应用程序只运行一个实例。当我按下应用程序启动它,然后按主页按钮并按下应用程序启动另一个实例,在开始新的实例之前,前一个实例未被杀死。当应用程序被加载我按后退按钮来关闭它,然后另一个实例关闭后的第一个正确的弹出...防止android启动应用程序的另一个实例

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

“阻止android启动另一个应用程序实例” - 只会有一个* app *实例。可能有多个*活动*的实例。一项活动不是一款应用程序。 – 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线程之间创建一个“沟通渠道”。你可以使用一个Handler https://developer.android.com/training/multiple-threads/communicate-ui.html – Lino

相关问题