不显示异步飞溅活动
问题描述:
我将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();
}
}
}
答
在你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>
希望这有助于。
您的意图过滤器不会将启动活动设置为首先打开或显示在启动器上 –