Android代码优化,主界面卡住 自己有个思路,在fragment的oncreateview的时候,把activity的动画给关闭。不知道谁还有更好的思路,,, 解决方案 » 免费领取超大流量手机卡,每月29元包185G流量+100分钟通话, 中国电信官方发货 没碰到类似情况, 如果业务卡的话, 异步处理就可以 ,不至于对UI线程造成堵塞。会不会你在fragment 初始化时候执行了大量的运算?如果有代码, 就可以分析分析。 @Override public void onCreate(Bundle savedInstanceState) { // TODO Auto-generated method stub super.onCreate(savedInstanceState); instance=MainActivity.this; mControlCenter = FragmentControlCenter.getInstance(this); mApplication=(EasyEditClientApplication) this.getApplication(); initViews(); initData(); } private void initViews() { setContentView(R.layout.main_slidemenu_layout); initActionBar(); mRightIcon=(TextView) findViewById(R.id.iv_right_icon); initSlideMenu(); } private void initSlideMenu() { FragmentModel fragmentModel = mControlCenter.getHomeFragmentModel(); switchHomeContent(fragmentModel); SlidingMenu sm = getSlidingMenu(); sm.setMode(SlidingMenu.LEFT_RIGHT); setBehindContentView(R.layout.left_menu_frame); sm.setSlidingEnabled(true); sm.setTouchModeAbove(SlidingMenu.TOUCHMODE_FULLSCREEN); sm.setShadowWidthRes(R.dimen.shadow_width); sm.setShadowDrawable(R.drawable.shadow); getSupportActionBar().setDisplayHomeAsUpEnabled(true); getSupportFragmentManager().beginTransaction() .replace(R.id.left_menu_frame, new MenuFragment()).commit(); sm.setBehindOffsetRes(R.dimen.slidingmenu_offset); sm.setBehindScrollScale(0); sm.setFadeDegree(0.25f); sm.setSecondaryMenu(R.layout.right_menu_frame); sm.setSecondaryShadowDrawable(R.drawable.shadow); getSupportFragmentManager().beginTransaction() .replace(R.id.right_menu_frame, new SettingFragment()).commit(); } private void initActionBar() { ActionBar actionBar = getSupportActionBar(); actionBar.setCustomView(R.layout.actionbar_layout); actionBar.setDisplayShowCustomEnabled(true); actionBar.setDisplayShowHomeEnabled(false); mLeftIcon = (ImageView) findViewById(R.id.iv_left_icon); mRightIcon = (TextView) findViewById(R.id.iv_right_icon); mLeftIcon.setOnClickListener(this); mRightIcon.setOnClickListener(this); mTitleTextView = (TextView) findViewById(R.id.tv_title); } private void initData() { } public void switchContent(final FragmentModel fragment) { mTitle = fragment.mTitle; mContent = fragment.mFragment; mRightIcon.setVisibility(8); getSupportFragmentManager().beginTransaction() .replace(R.id.content_frame, mContent).commit(); Handler h = new Handler(); h.postDelayed(new Runnable() { public void run() { getSlidingMenu().showContent(); } }, 50); mTitleTextView.setText(mTitle); } public void switchHomeContent(final FragmentModel fragment) { mTitle = fragment.mTitle; mContent = fragment.mFragment; mRightIcon.setText("分类"); mRightIcon.setVisibility(0); getSupportFragmentManager().beginTransaction() .replace(R.id.content_frame, mContent).commit(); Handler h = new Handler(); h.postDelayed(new Runnable() { public void run() { getSlidingMenu().showContent(); } }, 50); mTitleTextView.setText(mTitle); } public void switchDownContent(final FragmentModel fragment) { mTitle = fragment.mTitle; mContent = fragment.mFragment; mRightIcon.setText("编辑"); mRightIcon.setVisibility(0); getSupportFragmentManager().beginTransaction() .replace(R.id.content_frame, mContent).commit(); Handler h = new Handler(); h.postDelayed(new Runnable() { public void run() { getSlidingMenu().showContent(); } }, 50); mTitleTextView.setText(mTitle); } 初步估计 你这个仿qq的左边是菜单fragment,右边是设置 fragment1 先关闭这两个的fragment的 replace操作。 看看效果。2 将这两个fragment 的构建推迟到 主界面生成后执行。 我这两天更新了最新的SDK和eclipse,然后调试的时候就特别卡,打个release的包就没问题~ 第二点不是很明白,构架顺序是MAINACTIVITY->左边的fragment->右边的fragmnet,怎么推迟到主界面生成后执行,主界面其实就是右边的fragment 额 有界面的截图来一张我的意思如果一个fragment 并没有马上显示的话 可以postDelay类似方法推迟(replace)个人想法, 无效勿怪。 额 有界面的截图来一张我的意思如果一个fragment 并没有马上显示的话 可以postDelay类似方法推迟(replace)个人想法, 无效勿怪。没事,我也不知道是什么原因,多参考下各方意见 android作为服务器 pc做客户端 通信 Cursor 遍历数据库,莫名其妙出现异常 Failed to install Location.apk on device 'I8979eba851a': timeout 如何编译launcher源码? 求一个按钮选中效果 android libgcc 求助 关于ksoap2 中产生的错误 怎么样移除正在运行的栈堆里的某个包? android Share SDK 获取新浪微博授权登录后的token 大家有android移动OA或BBS的实战教程么 apk修改strings.xml后重新打包出错 adb命令开启手机的一些功能,请问怎么操作?
会不会你在fragment 初始化时候执行了大量的运算?如果有代码, 就可以分析分析。
public void onCreate(Bundle savedInstanceState) {
// TODO Auto-generated method stub
super.onCreate(savedInstanceState);
instance=MainActivity.this;
mControlCenter = FragmentControlCenter.getInstance(this);
mApplication=(EasyEditClientApplication) this.getApplication();
initViews(); initData();
} private void initViews() { setContentView(R.layout.main_slidemenu_layout);
initActionBar();
mRightIcon=(TextView) findViewById(R.id.iv_right_icon);
initSlideMenu(); } private void initSlideMenu() {
FragmentModel fragmentModel = mControlCenter.getHomeFragmentModel();
switchHomeContent(fragmentModel);
SlidingMenu sm = getSlidingMenu();
sm.setMode(SlidingMenu.LEFT_RIGHT);
setBehindContentView(R.layout.left_menu_frame);
sm.setSlidingEnabled(true);
sm.setTouchModeAbove(SlidingMenu.TOUCHMODE_FULLSCREEN);
sm.setShadowWidthRes(R.dimen.shadow_width);
sm.setShadowDrawable(R.drawable.shadow);
getSupportActionBar().setDisplayHomeAsUpEnabled(true);
getSupportFragmentManager().beginTransaction()
.replace(R.id.left_menu_frame, new MenuFragment()).commit();
sm.setBehindOffsetRes(R.dimen.slidingmenu_offset);
sm.setBehindScrollScale(0);
sm.setFadeDegree(0.25f);
sm.setSecondaryMenu(R.layout.right_menu_frame);
sm.setSecondaryShadowDrawable(R.drawable.shadow);
getSupportFragmentManager().beginTransaction()
.replace(R.id.right_menu_frame, new SettingFragment()).commit();
} private void initActionBar() {
ActionBar actionBar = getSupportActionBar();
actionBar.setCustomView(R.layout.actionbar_layout);
actionBar.setDisplayShowCustomEnabled(true);
actionBar.setDisplayShowHomeEnabled(false);
mLeftIcon = (ImageView) findViewById(R.id.iv_left_icon);
mRightIcon = (TextView) findViewById(R.id.iv_right_icon);
mLeftIcon.setOnClickListener(this);
mRightIcon.setOnClickListener(this);
mTitleTextView = (TextView) findViewById(R.id.tv_title);
} private void initData() { } public void switchContent(final FragmentModel fragment) {
mTitle = fragment.mTitle;
mContent = fragment.mFragment;
mRightIcon.setVisibility(8);
getSupportFragmentManager().beginTransaction()
.replace(R.id.content_frame, mContent).commit();
Handler h = new Handler();
h.postDelayed(new Runnable() {
public void run() {
getSlidingMenu().showContent();
}
}, 50); mTitleTextView.setText(mTitle);
} public void switchHomeContent(final FragmentModel fragment) {
mTitle = fragment.mTitle;
mContent = fragment.mFragment;
mRightIcon.setText("分类");
mRightIcon.setVisibility(0);
getSupportFragmentManager().beginTransaction()
.replace(R.id.content_frame, mContent).commit();
Handler h = new Handler();
h.postDelayed(new Runnable() {
public void run() {
getSlidingMenu().showContent();
}
}, 50); mTitleTextView.setText(mTitle);
}
public void switchDownContent(final FragmentModel fragment) {
mTitle = fragment.mTitle;
mContent = fragment.mFragment;
mRightIcon.setText("编辑");
mRightIcon.setVisibility(0);
getSupportFragmentManager().beginTransaction()
.replace(R.id.content_frame, mContent).commit();
Handler h = new Handler();
h.postDelayed(new Runnable() {
public void run() {
getSlidingMenu().showContent();
}
}, 50); mTitleTextView.setText(mTitle);
}
你这个仿qq的
左边是菜单fragment,右边是设置 fragment1 先关闭这两个的fragment的 replace操作。 看看效果。
2 将这两个fragment 的构建推迟到 主界面生成后执行。
额 有界面的截图来一张我的意思如果一个fragment 并没有马上显示的话 可以postDelay类似方法推迟(replace)
个人想法, 无效勿怪。
额 有界面的截图来一张我的意思如果一个fragment 并没有马上显示的话 可以postDelay类似方法推迟(replace)
个人想法, 无效勿怪。没事,我也不知道是什么原因,多参考下各方意见