2012-04-18 50 views
0

私はスプラッシュ画面を使用していたアプリを開発しています。しかし、スプラッシュが消えた後、
私の主なアクティビティに切り替える前に次の画面が黒くなり、黒い画面が欲しくなりません。誰も私にこれを行う方法を提案できますか? ここに私のコードです。アンドロイドのスプラッシュ画面の後に黒い画面が表示される

ランチャー活動

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); 
} 
} 

私は非同期タスクを試しましたが、うまくいかなかった。 SplashScreen.javaで

ProjectStart

public class ProjectStart extends AsyncTask<Context, Void, Void>{ 
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"); 
}*/ 

} //クラス

私はここに修正

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.<init>(Handler.java:121) 
04-19 11:29:02.181: E/AndroidRuntime(341): at android.os.AsyncTask$InternalHandler.<init>(AsyncTask.java:421) 
04-19 11:29:02.181: E/AndroidRuntime(341): at android.os.AsyncTask$InternalHandler.<init>(AsyncTask.java:421) 
04-19 11:29:02.181: E/AndroidRuntime(341): at android.os.AsyncTask.<clinit>(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() 

私は問題が何かを得ていません。

+0

は、あなたのコードはどこにありますか? –

+0

こんにちは、スプラッシュ画面で何をすればいいのか教えてください。メインアクティビティ –

+0

は、MainActivityのonCreate()でできるだけ多くのコードを減らそうとしています。 – Richa

答えて

1

私はあなたのための最高のソリューションを考えるとasynctask

は、開発者サイトからの例であると思います。 Asynctaskには主に4つのメソッドがあります。

onPreExecute() 

doInBackground(Params...) 

onProgressUpdate(Progress...) 

onPostExecute(Result) 

これは他のExampleです。

+0

申し訳ありませんが、誤って投稿を修正しました。 ypurの提案通り、私は非同期タスクを試しましたが、うまくいきませんでした。 – Nitish

+0

非同期タスクを使用しています。この例外が発生しました:E/AndroidRuntime(341):原因:java.lang.RuntimeException:Looper.prepare()を呼び出していないスレッド内でハンドラを作成できません。 – Nitish

+0

@nitish:このブログを見てください。 http://androidpartaker.wordpress.com/2010/08/01/android-async-task/ – Bhavin

2

しかし、スプラッシュが消えた後、画面は私の主な活動

に を切り替える前に、黒となりあなたがする時間を割いているMainActivityのUIにいくつかのバックグラウンドプロセスをやっているかもしれないと思われますバックグラウンドプロセス。もしそうなら、使用バックグラウンド・プロセスのための

  • AsyncTask
  • サービス
  • IntentService

。表示されていない場合は、メインアクティビティを表示します。

0

あなたの活動の意図にフラグを追加します。..でsetFlags(Intent.FLAG_ACTIVITY_NO_ANIMATION)

関連する問題