android绘制黑色画面,在Android中的启动画面后出现的黑色屏幕

开发者分享了在Android应用中遇到启动画面后黑屏的解决方案,通过修改SplashScreenActivity和引入异步任务ProjectStart来避免黑屏,展示了关键代码片段并分析了错误原因和修复过程。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

我正在开发一个应用程序,我在其中使用启动画面。但在飞溅消失后,然后

在切换到我的主要活动之前,下一个屏幕变黑,我不想黑屏。任何人都可以请建议我如何做到这一点? 这是我的代码。在Android中的启动画面后出现的黑色屏幕

发射活动

public class MainActivity extends Activity{

public static final String TAG = "MainActivity";

protected void onCreate(Bundle savedInstanceState) {

// TODO Auto-generated method stub

super.onCreate(savedInstanceState);

Intent in = new Intent(getApplicationContext(), SplashScreenActivity.class);

synchronized (this) {

try {

wait(50);

} catch (InterruptedException e) {

String str = e.toString();

Log.d(TAG, str);

}//catch

}//synchronized block

startActivity(in);

}//onCreate

}//class

SplashScreenAcitvity

public class SplashScreenActivity extends Activity {

private Thread splashThread;

public static final String TAG = "SplashScreenActivity";

public void onCreate(Bundle savedInstanceState) {

super.onCreate(savedInstanceState);

setContentView(R.layout.splash);

final SplashScreenActivity splashScreen = this;

splashThread = new Thread(){

public void run(){

try {

synchronized (this) {

wait(3000);

}

} catch (Exception e) {

String str = e.toString();

Log.d(TAG, str);

}

finish();

Intent in = new Intent();

in.setClass(splashScreen, ProjectActivity.class);

startActivity(in);

stop();

}//run

};

splashThread.start();

}//onCreate

}//class

项目活动 这是从哪儿主营业务将启动类。

public class ProjectActivity extends TabActivity {

static int x=0;

static int color;

public void onCreate(Bundle savedInstanceState) {

super.onCreate(savedInstanceState);

requestWindowFeature(Window.FEATURE_NO_TITLE);

setContentView(R.layout.tabxml);

if(x==1)

{

Dor.c=1;

color = getIntent().getExtras().getInt("color");

//Intent in=new Intent();

//in.putExtra("color",color);

}

Resources res = getResources(); // Resource object to get Drawables

TabHost tabHost = getTabHost(); // The activity TabHost

TabHost.TabSpec spec; // Resusable TabSpec for each tab

Intent intent; // Reusable Intent for each tab

// Create an Intent to launch an Activity for the tab (to be reused)

intent = new Intent().setClass(this, Dor.class);

// Initialize a TabSpec for each tab and add it to the TabHost

spec = tabHost.newTabSpec("dor").setIndicator("Dor",

res.getDrawable(R.drawable.ic_tab_artists))

.setContent(intent);

tabHost.addTab(spec);

// Do the same for the other tabs

intent = new Intent().setClass(this, Album.class);

spec = tabHost.newTabSpec("albums").setIndicator("Albums",

res.getDrawable(R.drawable.ic_tab_album)

.setContent(intent);

tabHost.addTab(spec);

intent = new Intent().setClass(this, Forhandler.class);

spec = tabHost.newTabSpec("forhandler").setIndicator("Forhandler",

res.getDrawable(R.drawable.ic_tab_forhandler))

.setContent(intent);

tabHost.addTab(spec);

intent = new Intent().setClass(this, Diplomat.class);

spec = tabHost.newTabSpec("diplomat").setIndicator("Diplomat",

res.getDrawable(R.drawable.ic_tab_diplomat))

.setContent(intent);

tabHost.addTab(spec);

tabHost.setCurrentTab(0);

}

}

我尝试了异步任务,但它没有奏效。这里是我修改后的代码:

ProjectStart

public class ProjectStart extends AsyncTask{

public static final String TAG = "ProjectStart";

/*public ProjectStart() {

super("ProjectStart");

// TODO Auto-generated constructor stub

}*/

Context ctx;

public ProjectStart(Context context){

this.ctx = context;

}//constructor

@Override

protected Void doInBackground(Context... params) {

// TODO Auto-generated method stub

Intent in = new Intent();

in.setClass(ctx, ProjectActivity.class);

Log.d(TAG, "doInBackground called");

return null;

}//doInBackground

/*@Override

protected void onHandleIntent(Intent intent) {

// TODO Auto-generated method stub

Intent in = new Intent();

in.setClass(getApplicationContext(), ProjectActivity.class);

startActivity(in);

Log.d("Project Start", "onHandleIntentCalled");

}*/

} //类

在SplashScreen.java我如下修改

splashThread = new Thread() {

public void run(){

try {

synchronized (this) {

wait(3000);

}//synchronized

}//try

catch(InterruptedException e) {}

finally {

finish();

new ProjectStart(sPlashScreen).execute();

/*Intent in = new Intent(getApplicationContext(), ProjectStart.class);

startService(in);*/

stop();

}//finally

Log.d(TAG, "run method called");

}//run

};

而且,这里是堆栈跟踪:

04-19 11:29:02.181: E/AndroidRuntime(341): FATAL EXCEPTION: Thread-8

04-19 11:29:02.181: E/AndroidRuntime(341): java.lang.ExceptionInInitializerError

04-19 11:29:02.181: E/AndroidRuntime(341): at abc.com.camera.SplashScreen$1.run(SplashScreen.java:32)

04-19 11:29:02.181: E/AndroidRuntime(341): Caused by: java.lang.RuntimeException: Can't create handler inside thread that has not called Looper.prepare()

04-19 11:29:02.181: E/AndroidRuntime(341): at android.os.Handler.(Handler.java:121)

04-19 11:29:02.181: E/AndroidRuntime(341): at android.os.AsyncTask$InternalHandler.(AsyncTask.java:421)

04-19 11:29:02.181: E/AndroidRuntime(341): at android.os.AsyncTask$InternalHandler.(AsyncTask.java:421)

04-19 11:29:02.181: E/AndroidRuntime(341): at android.os.AsyncTask.(AsyncTask.java:152)

04-19 11:29:02.181: E/AndroidRuntime(341): ... 1 more

04-19 11:29:02.181: E/AndroidRuntime(341): Caused by: java.lang.RuntimeException: Can't create handler inside thread that has not called Looper.prepare()

我没有得到什么问题。

2012-04-18

Nitish

+0

您的代码在哪里? –

2012-04-18 05:10:08

+0

嗨,你能告诉我你在启动画面中做了什么,主要活动 –

2012-04-18 05:10:28

+0

试图在MainActivity的onCreate()中尽可能多地减少代码。 –

2012-04-18 05:17:05

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值