杂记

1. Activity启动模式

  (1)standard

    默认模式,每启动一个都会在任务栈中创建一个,back键会依次从栈中退出。

  (2)singleTop

    如果要启动的Activity在栈顶,则不会重新创建。

  (3)singleTask

    任务栈中没有这个Activity,则会在任务栈中创建一个实例,如果任务栈中已经存在,则会将任务栈中的此activity之上的activity全部出栈,然后调用此activity的onNewIntent.

  (4)singleInstance

    只有一个实例,运行于独立的task

2.layout_gravity 和 gravity

   android:gravity : 限定View的内容的位置,针对子布局

   android:layout_gravity  相对于父布局的位置。

3.时间管理:

  (1)进程切换非常昂贵,避免多任务,保持单进程。

  (2)研究表明,集中注意力、高效工作,每天最多4小时。

  (3)划分任务的优先级,不要把'急切'当作'重要'。

  (4)起床后,不要查看邮件和微信。

  (5)避免开会,因为人类已知的最浪费时间的事情,就是开会。

  (6)早晨4点起床,到了中午,你就完成了一天的任务。

  (7)你没空时不会做的事情,有空了也不会做。  (世上并没有拖延症,只是不想做而已。如果可能,应该尽早放弃你没有意愿去做的那些事。而那些没有时间也会去做的事,才是你应该全力以赴的人生方向。完全赞同,没时间永远是借口)

4.Android ConditionVariable:

  ConditionVariable用于线程同步,相当于wait(),但是更方便简单

  有三个方法: block() open() close()     

 1     public void block()
 2     {
 3         synchronized (this) {
 4             while (!mCondition) {
 5                 try {
 6                     this.wait();
 7                 }
 8                 catch (InterruptedException e) {
 9                 }
10             }
11         }
12     }
13 
14     public void open()
15     {
16         synchronized (this) {
17             boolean old = mCondition;
18             mCondition = true;
19             if (!old) {
20                 this.notifyAll();
21             }
22         }
23     }
24 
25     public void close()
26     {
27         synchronized (this) {
28             mCondition = false;
29         }
30     }
View Code

  从源码中可以看到,其实也是通过wait实现的,有一点需要注意 open过之后,只有close了,才能block住。

5.back键将应用放到后台,不退出

  复写onBackPressed()方法, 调用Activity的 moveTaskToBack()方法 即可。

6. Android ClassLoader

  PathClassLoader 只能操作dex文件

  DexClassLoader 能加载外部apk,jar,dex

7.主线程的Looper的创建

  主线程的Looper是在ActivityThread的main()方法中种创建的。  

 1     ActivityThread.java
 2           
 3     public static void main(String[] args) {
 4         ......
 5         Looper.prepareMainLooper();
 6         ......
 7     }    
 8 
 9     Looper.java
10     
11     public static void prepareMainLooper() {
12         prepare(false);
13         synchronized (Looper.class) {
14             if (sMainLooper != null) {
15                 throw new IllegalStateException("The main Looper has already been prepared.");
16             }
17             sMainLooper = myLooper();
18         }
19     }

 8.创建一个圆形图片:

 1     protected void onCreate(Bundle savedInstanceState) {
 2         super.onCreate(savedInstanceState);
 3         setContentView(R.layout.activity_main);
 4         mImageView = (ImageView) findViewById(R.id.mImageView);
 5         Bitmap b = BitmapFactory.decodeResource(getResources(),R.drawable.haha1);
 6         Bitmap s = createCircleBitmap(b);
 7         Drawable drawable = new BitmapDrawable(s);
 8         mImageView.setBackgroundDrawable(drawable);
 9     }
10 
11     
12     @SuppressLint("ResourceAsColor")
13     public Bitmap createCircleBitmap (Bitmap source) {
14         Paint p = new Paint();
15         p.setAntiAlias(true);
16         int min = source.getWidth() > source.getHeight() ? source.getHeight() : source.getWidth();
17         
18         Bitmap target = Bitmap.createBitmap(min, min , Config.ARGB_8888);
19         
20         Canvas canvas = new Canvas(target);
21         canvas.drawCircle(min/2, min/2, min/2, p);
22         p.setXfermode(new PorterDuffXfermode(PorterDuff.Mode.SRC_IN));
23         canvas.drawBitmap(source, 0, 0, p);
24         return target;
25     }

  p.setXfermode(new PorterDuffXfermode(PorterDuff.Mode.SRC_IN)); 最主要的是这句,通过相互之前的一个遮盖关系实现。

9.PowerFramework 框架

PowerFramework是一款几乎囊括了所有Android基础功能的框架应用,这个框架目前是开源的,开发者可以在这个框架的基础上进行二次开发。结合开发者自己的UI设计,可以很快就能开发出具备基础应用功能的Android应用。

 

框架和DEMO文件下载地址  http://www.ideayapai.com/Application/Home/View/default/PowerFamily/index-2.htm

10.设置屏幕亮度:   

  通过设置Window的参数来控制。

1                 Window w = getWindow();
2                 WindowManager.LayoutParams wl = w.getAttributes();
3                 wl.screenBrightness = (float)progress / 100;             // progress是seekBar的滑动的变化值
4                 if (wl.screenBrightness < 0.1f) wl.screenBrightness = 0.1f;    // 最好能在这做一下限制,不同厂商对屏幕亮度调到最小时显示有差异,有的可能直接就黑屏
5                 if (wl.screenBrightness > 1.0f) wl.screenBrightness = 1.0f;      
6                 w.setAttributes(wl);

 11.自定义Notification

      NotificationCompat.Builder b = new NotificationCompat.Builder(this);
         RemoteViews remoteView = new RemoteViews(getPackageName(),
                        R.layout.notify_remoteview);
         remoteView.setTextViewText(R.id.MusicName,"MusicName");
         remoteView.setImageViewResource(R.id.ImageV,R.mipmap.ic_launcher);
         remoteView.setTextViewText(R.id.geci,"光辉岁月");
         b.setContent(remoteView)
              .setSmallIcon(R.drawable.ic_launcher);
         Notification notification = b.build();
         notification.flags = Notification.FLAG_AUTO_CANCEL;
         NM.notify(1,notification);

   通知不显示出来:解决办法,clean project 一下,就Ok. 记得一定要设置Icon,不然不生效。  

12 DecorView 

     private final class DecorView extends FrameLayout

   DecorView继承自FrameLayout, 是PhoneWindow 的内部类,是Window的顶层View

13 ApplicationThread 是 ActivityThread的内部类, 启动activity的时候,会调用ApplicationThread的scheduleLaunchActivity()方法,里面通过Handler发

消息启动Activity

  ApplicationThread 继承自ApplicationThreadNative,ApplicationThreadNative继承自Binder

posted on 2016-07-05 21:39  梦想,就在不远方  阅读(146)  评论(0编辑  收藏  举报

导航