대략..
tab 이랑 viewpager 사용해서 구현했습니다.
대체로 정상 동작하는데요.
화면을 끄면 (전원버튼 눌러서 대기모드로) 아래와 같이 에러를 내뿜고 app 이 종료됩니다.
fragment manager 에서 오류가 발생하는거 같은데 어떤 원인인지 모르겠네요...
 
익스플로어로 로그인 해서 코드  전문 추가합니다.
아직 다른 기능은 없어서 보시기엔 편할거예요.
 
import java.util.List;
import java.util.Vector;

import net.oartism.core.PagerAdapter;
import android.content.pm.ActivityInfo;
import android.os.Bundle;
import android.support.v4.app.Fragment;
import android.support.v4.app.FragmentActivity;
import android.support.v4.view.ViewPager;
import android.view.KeyEvent;
import android.view.LayoutInflater;
import android.view.View;
import android.view.Window;
import android.view.WindowManager;
import android.widget.TabHost;
import android.widget.TabHost.TabSpec;
import android.widget.TextView;

public class MainActivity extends  FragmentActivity
       implements TabHost.OnTabChangeListener,
          TabHost.TabContentFactory,
          ViewPager.OnPageChangeListener {

 private TabHost tabHost;
 private ViewPager viewPager;
 private PagerAdapter pagerAdapter;

 @Override
 public void onCreate(Bundle savedInstanceState) {
  super.onCreate(savedInstanceState);

  requestWindowFeature(Window.FEATURE_NO_TITLE);
  setRequestedOrientation(ActivityInfo.SCREEN_ORIENTATION_SENSOR_PORTRAIT);
  getWindow().addFlags(WindowManager.LayoutParams.FLAG_SPLIT_TOUCH
    |WindowManager.LayoutParams.FLAG_FULLSCREEN);

  setContentView(R.layout.main);

  initializeTabHost();
  initializeViewPager();
 }

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

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

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

 @Override
 protected void onSaveInstanceState(Bundle outState) {
  outState.putString("tabTag", tabHost.getCurrentTabTag());
  super.onSaveInstanceState(outState);
 }

 private void AddTab(int indicatorId, TabHost tabHost, String tag) {
  View v = LayoutInflater.from(this).inflate(indicatorId, null);
  TextView tv = (TextView) v.findViewById(R.id.tvTabIndicator);
  tv.setText(tag);

  TabSpec tabSpec = tabHost.newTabSpec(tag).setIndicator(v).setContent(this);
  tabHost.addTab(tabSpec);
 }

 private void initializeTabHost() {
  tabHost = (TabHost) findViewById(android.R.id.tabhost);
  tabHost.setup();

  AddTab(R.layout.tab_indicator, tabHost, getString(R.string.tab1));
  AddTab(R.layout.tab_indicator, tabHost, getString(R.string.tab2));
  AddTab(R.layout.tab_indicator, tabHost, getString(R.string.tab3));
  AddTab(R.layout.tab_indicator, tabHost, getString(R.string.tab4));

  for(int i = 0; i < tabHost.getTabWidget().getChildCount(); i++) {
   tabHost.getTabWidget().getChildAt(i).getLayoutParams().height = 60;
  }
  tabHost.setOnTabChangedListener(this);
 }

 private void initializeViewPager() {
  List<Fragment> fragments = new Vector<Fragment>();
  fragments.add(Fragment.instantiate(this, Tab1Fragment.class.getName()));
  fragments.add(Fragment.instantiate(this, Tab2Fragment.class.getName()));
  fragments.add(Fragment.instantiate(this, Tab3Fragment.class.getName()));
  fragments.add(Fragment.instantiate(this, Tab4Fragment.class.getName()));

  pagerAdapter = new PagerAdapter(getSupportFragmentManager(), fragments);

  viewPager = (ViewPager) findViewById(R.id.viewPager);
  viewPager.setAdapter(pagerAdapter);
  viewPager.setOnPageChangeListener(this);
 }

 @Override
 public boolean onKeyDown(int keyCode, KeyEvent event) {
  switch (keyCode) {
  case KeyEvent.KEYCODE_BACK:
   return true;
  case KeyEvent.KEYCODE_SEARCH:
   return true;
  case KeyEvent.KEYCODE_MENU:
   return true;
  }
  return super.onKeyDown(keyCode, event);
 }

 @Override public void onTabChanged(String tabId) { viewPager.setCurrentItem(tabHost.getCurrentTab()); }
 @Override public void onPageSelected(int position) { tabHost.setCurrentTab(position); }
 @Override public void onPageScrolled(int arg0, float arg1, int arg2) {}
 @Override public void onPageScrollStateChanged(int state) {}
 @Override public View createTabContent(String tag) { return new View(this); }
}



01-23 20:08:36.453: E/AndroidRuntime(4823): FATAL EXCEPTION: main
01-23 20:08:36.453: E/AndroidRuntime(4823): java.lang.NullPointerException
01-23 20:08:36.453: E/AndroidRuntime(4823): at android.support.v4.app.FragmentManagerImpl.saveFragmentBasicState(FragmentManager.java:1576)
01-23 20:08:36.453: E/AndroidRuntime(4823): at android.support.v4.app.FragmentManagerImpl.saveAllState(FragmentManager.java:1617)
01-23 20:08:36.453: E/AndroidRuntime(4823): at android.support.v4.app.FragmentActivity.onSaveInstanceState(FragmentActivity.java:481)
01-23 20:08:36.453: E/AndroidRuntime(4823): at android.app.Activity.performSaveInstanceState(Activity.java:1113)
01-23 20:08:36.453: E/AndroidRuntime(4823): at android.app.Instrumentation.callActivityOnSaveInstanceState(Instrumentation.java:1185)
01-23 20:08:36.453: E/AndroidRuntime(4823): at android.app.ActivityThread.performStopActivityInner(ActivityThread.java:2793)
01-23 20:08:36.453: E/AndroidRuntime(4823): at android.app.ActivityThread.handleStopActivity(ActivityThread.java:2851)
01-23 20:08:36.453: E/AndroidRuntime(4823): at android.app.ActivityThread.access$900(ActivityThread.java:123)
01-23 20:08:36.453: E/AndroidRuntime(4823): at android.app.ActivityThread$H.handleMessage(ActivityThread.java:1161)
01-23 20:08:36.453: E/AndroidRuntime(4823): at android.os.Handler.dispatchMessage(Handler.java:99)
01-23 20:08:36.453: E/AndroidRuntime(4823): at android.os.Looper.loop(Looper.java:137)
01-23 20:08:36.453: E/AndroidRuntime(4823): at android.app.ActivityThread.main(ActivityThread.java:4424)
01-23 20:08:36.453: E/AndroidRuntime(4823): at java.lang.reflect.Method.invokeNative(Native Method)
01-23 20:08:36.453: E/AndroidRuntime(4823): at java.lang.reflect.Method.invoke(Method.java:511)
01-23 20:08:36.453: E/AndroidRuntime(4823): at com.android.internal.os.ZygoteInit$MethodAndArgsCaller.run(ZygoteInit.java:784)
01-23 20:08:36.453: E/AndroidRuntime(4823): at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:551)
01-23 20:08:36.453: E/AndroidRuntime(4823): at dalvik.system.NativeStart.main(Native Method)