不显示异步飞溅活动

问题描述:

我将SplashActivity设置为第一个在应用程序启动时注册。然后在我的AsyncTask的postExecute方法中,我开始一个新的意图,将您带到MainActivity。为什么这不起作用?我没有得到一个例外。该应用程序只是打开我的MainAcitvity ...也许我需要清洁重新构建项目几次...不显示异步飞溅活动

清单:

<activity 
      android:name=".activity.SplashActivity" 
      android:configChanges="keyboardHidden|orientation|screenSize" 
      android:label="@string/app_name" 
      android:launchMode="singleTask" 
      android:screenOrientation="portrait" > 
      <intent-filter> 
       <action android:name="android.intent.action.SEND" /> 
       <category android:name="android.intent.category.DEFAULT" /> 
       <data android:mimeType="image/*" /> 
      </intent-filter> 
     </activity> 
    <activity 
     android:name=".activity.MainActivity" 
     android:configChanges="keyboardHidden|orientation|screenSize" 
     android:label="@string/app_name" 
     android:launchMode="singleTask" 
     android:screenOrientation="portrait" > 
    </activity> 

代码:

public class SplashActivity extends Activity { 

    private static final int SPLASH_SHOW_TIME = 40800; 

    @Override protected void onCreate(Bundle savedInstanceState) { 
     super.onCreate(savedInstanceState); 
     this.requestWindowFeature(Window.FEATURE_NO_TITLE); 
     this.getWindow().setFlags(WindowManager.LayoutParams.FLAG_FULLSCREEN, WindowManager.LayoutParams.FLAG_FULLSCREEN); 
     setContentView(R.layout.splash); 
     new BackgroundSplashTask().execute(); 
    } 

    private class BackgroundSplashTask extends AsyncTask<Void, Void, Void> { 

     @Override 
     protected void onPreExecute(){ 
      super.onPreExecute(); 
     } 

     @Override 
     protected Void doInBackground(Void... arg0) { 
      try { 
       Thread.sleep(SPLASH_SHOW_TIME); 
      } catch (InterruptedException e) { 
       e.printStackTrace(); 
      } return null; 
     } 

     @Override 
     protected void onPostExecute(Void result) { 
      super.onPostExecute(result); 
      Intent i = new Intent(SplashActivity.this, MainActivity.class); 
      startActivity(i); finish(); 
     } 

    } 

} 
+0

您的意图过滤器不会将启动活动设置为首先打开或显示在启动器上 –

在你AndroidManifest.xml文件中设置SplashActivity为如下:

<activity android:name=".activity.SplashActivity" 
     android:configChanges="keyboardHidden|orientation|screenSize" 
     android:label="@string/app_name" 
     android:launchMode="singleTask" 
     android:screenOrientation="portrait" >> 
    <intent-filter> 
     <action android:name="android.intent.action.MAIN" /> 

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

然后你AsycTask内,只是从你的onPostExecute(Void result)方法去除super.onPostExecute(result);行代码。另外删除onPreExecute()的实现,在你的情况下不需要。

private class BackgroundSplashTask extends AsyncTask<Void, Void, Void> { 

    @Override 
    protected Void doInBackground(Void... arg0) { 
     try { 
      Thread.sleep(SPLASH_SHOW_TIME); 
     } catch (InterruptedException e) { 
      e.printStackTrace(); 
     } return null; 
    } 

    @Override 
    protected void onPostExecute(Void result) { 
     Intent i = new Intent(SplashActivity.this, MainActivity.class); 
     startActivity(i); finish(); 
    } 

} 

我想你必须添加这两行到你的清单SplashActivity

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

希望这有助于。