[关闭]
@ZeroGeek 2016-01-04T08:11:58.000000Z 字数 2337 阅读 811

Android开发建议

android 建议


1

Android退出应用最优雅的方式

http://android.jobbole.com/82316/?hmsr=toutiao.io&utm_medium=toutiao.io&utm_source=toutiao.io
四、 RS优雅式

什么是RS式呢?即Receiver+singleTask 。我们知道Activity有四种加载模式,而singleTask就是其中的一种,使用这个模式之后,当startActivity时,它先会在当前栈中查询是否存在Activity的实例,如果存在,则将其至于栈顶,并将其之上的所有Activity移除栈。我们打开一个app,首先是一个splash页面,然后会finish掉splash页面。跳转到主页。然后会在主页进行N次的跳转,期间会产生数量不定的Activity,有的被销毁,有的驻留在栈中,但是栈底永远是我们的HomeActivity。这样就让问题变得简单很多了。我们只需两步操作即可优雅的实现app的退出。
1、在HomeActivity注册一个退出广播,和第二个广播式一样,但是这里只需要在HomeActivity一个页面注册即可。
2、设置HomeActivity的启动模式为singleTask。

当我们需要退出的时候只需要startActivity(this,HomeActivity,class), 再发送一个退出广播。上面代码首先会把栈中HomeActivity之上的所有Activity移除出栈,然后接到广播finish自己。一切OK ! 没有弹框,不用考虑机型Rom适配。不会有内存问题,就是那么的优雅,简单!

View to Bitmap

1

  1. FrameLayout view = (FrameLayout)findViewById(R.id.framelayout);
  2. view.setDrawingCacheEnabled(true);
  3. view.buildDrawingCache();
  4. Bitmap bm = view.getDrawingCache();

2

  1. FrameLayout view = (FrameLayout)findViewById(R.id.framelayout);
  2. Bitmap bitmap = Bitmap.createBitmap(view.getWidth(), view.getHeight(),Bitmap.Config.ARGB_8888);
  3. Canvas canvas = new Canvas(bitmap);
  4. view.draw(canvas);

3

  1. /**
  2. * 将view转成bitmap
  3. * @param view
  4. * @return
  5. */
  6. public static Bitmap loadBitmapFromView(View view) {
  7. if (view == null) {
  8. return null;
  9. }
  10. view.measure(MeasureSpec.makeMeasureSpec(YUtils.dip2px(context, 60f),
  11. MeasureSpec.EXACTLY), MeasureSpec.makeMeasureSpec(
  12. YUtils.dip2px(context, 80f), MeasureSpec.EXACTLY));
  13. // 这个方法也非常重要,设置布局的尺寸和位置
  14. view.layout(0, 0, view.getMeasuredWidth(), view.getMeasuredHeight());
  15. // 生成bitmap
  16. Bitmap bitmap = Bitmap.createBitmap(view.getWidth(), view.getHeight(),
  17. Bitmap.Config.ARGB_8888);
  18. // 利用bitmap生成画布
  19. Canvas canvas = new Canvas(bitmap);
  20. // 把view中的内容绘制在画布上
  21. view.draw(canvas);
  22. return bitmap;
  23. }
  24. public class YUtils {
  25. /**
  26. * 根据手机的分辨率从 dp 的单位 转成为 px(像素)
  27. */
  28. public static int dip2px(Context context, float dpValue) {
  29. final float scale = context.getResources().getDisplayMetrics().density;
  30. return (int) (dpValue * scale + 0.5f);
  31. }
  32. /**
  33. * 根据手机的分辨率从 px(像素) 的单位 转成为 dp
  34. */
  35. public static int px2dip(Context context, float pxValue) {
  36. final float scale = context.getResources().getDisplayMetrics().density;
  37. return (int) (pxValue / scale + 0.5f);
  38. }
添加新批注
在作者公开此批注前,只有你和作者可见。
回复批注