当前位置:  编程技术>移动开发
本页文章导读:
    ▪DDMS查看Threads景况        DDMS查看Threads情况 DDMS查看Threads情况原文地址:http://www.cnblogs.com/flyme/archive/2011/08/26/2154270.html     有时候程序运行出现死锁或者信号量卡死是很纠结的问题,单看代码很难分析定位问题.........
    ▪ 什么是JIT        什么是JIT? 什么是JIT?         JIT是just in time,即时编译技术。使用该技术,能够加速java程序的执行速度。下面,就对该技术做个简单的讲解。         首先,我们大家都知道,通常j.........
    ▪ 替launcher添加一个仿Mac的dock(附源码)       为launcher添加一个仿Mac的dock(附源码) 之前在网上看到有篇文章:Launcher之Dock细节篇http://news.wangmeng.cn/detailNews/2716-the-article-details-launcher-dock 它实现了一个仿Mac的dock。感觉蛮有意思的,所以.........

[1]DDMS查看Threads景况
    来源: 互联网  发布时间: 2014-02-18
DDMS查看Threads情况
DDMS查看Threads情况
原文地址:http://www.cnblogs.com/flyme/archive/2011/08/26/2154270.html
     有时候程序运行出现死锁或者信号量卡死是很纠结的问题,单看代码很难分析定位问题,这时候可以借助DDMS来查看threads的运行情况,一目了然。
     手机连接上USB,确保adb连通,然后启动Eclipse里的DDMS,这时候应该手机就正常连接上了
         
   就如上图中显示的,只要连接上了就可以查看某个进程里的所有线程的活动了; 下面具体解释下Threads标签页里给出的每个字段的意思:
ID:   虚拟机分配的唯一的线程ID,在Dalvik里,它们是从3开始的奇数。
Tid:linux的线程ID号
Stauts:线程状态,比较多,有下面的一些
             running:  正在执行程序代码
             sleeping:执行了Thread.sleep()
             monitor:等待接受一个监听锁。
             wait::Object.wait(),等待被其他线程唤醒
             native:正在执行native代码,
             vmwait:等待虚拟机,(这个不是很懂,高手指教,这个状态在什么情况下发生)
             zombie:线程在垂死的进程
             init:线程在初始化(我们不可能看到)
             starting:线程正在启动(我们不可能看到)
utime:执行用户代码的累计时间
stime:执行系统代码的累计时间
name:线程的名字

另外,右侧每个Thread选中之后可以在下面看到Refresh按钮,这个点了之后,可以看到线程的函数执行,结合Status可以知道目前情况;而出现问题时某个线程一般会变为monitor状态,这时候就要特别留意他,并refresh下,检查他的执行情况 ,再回头结合代码,一般都能找到问题出在什么地方;

【PS】,该文比较适合容易重现的问题;

    
[2] 什么是JIT
    来源: 互联网  发布时间: 2014-02-18
什么是JIT?

什么是JIT?

        JIT是just in time,即时编译技术。使用该技术,能够加速java程序的执行速度。下面,就对该技术做个简单的讲解。

        首先,我们大家都知道,通常javac将程序源代码编译,转换成java字节码,JVM通过解释字节码将其翻译成对应的机器指令,逐条读入,逐条解释翻译。很显然,经过解释执行,其执行速度必然会比可执行的二进制字节码程序慢。为了提高执行速度,引入了JIT技术。

        在运行时JIT会把翻译过的机器码保存起来,已备下次使用,因此从理论上来说,采用该JIT技术可以,可以接近以前纯编译技术。下面我看看,JIT的工作过程。

JIT 编译过程
        当JIT编译启用时(默认是启用的),JVM读入.class文件解释后,将其发给JIT编译器。JIT编译器将字节码编译成本机机器代码,下图展示了该过程。


       通过上面的解释,我们了解了JIT的工作原理及过程,同样也发现了个问题,由于JIT对每条字节码都进行编译,造成了编译过程负担过重。为了避免这种情况,当前的JIT只对经常执行的字节码进行编译,如循环等。

      需要说明的是,JIT并不总是奏效,不能期望JIT一定能够加速你代码执行的速度,更糟糕的是她有可能降低代码的执行速度。这取决于你的代码结构,当然很多情况下我们还是能够如愿以偿的。


    
[3] 替launcher添加一个仿Mac的dock(附源码)
    来源: 互联网  发布时间: 2014-02-18
为launcher添加一个仿Mac的dock(附源码)
之前在网上看到有篇文章:Launcher之Dock细节篇http://news.wangmeng.cn/detailNews/2716-the-article-details-launcher-dock 它实现了一个仿Mac的dock。感觉蛮有意思的,所以就照着仿制了一个。

可以动态的添加快捷方式,默认包含AllApp按钮,图标居中显示。
文章后边附带的源码是基于android2.2自带的launcher2稍作修改而成,使用eclipse调试。

一、首先要在Launcher的setupViews函数里面初始化自己的layout(需增加3个地方)

[java] view plaincopy

    1.        
     
    dockbar=(DockBar)dragLayer.findViewById(R.id.dockbar); 
     
    dockbar.setLauncher(this);  
     
    dockbar.setDragController(dragController);       
     
    2. 
     
    dragController.setDragScoller(workspace); 
     
    dragController.setDragListener(deleteZone); 
     
    dragController.setDockDragListener(dockbar); // hmg25 add for dock 
     
      
     
    setDockDragListener为自定义函数,添加在DragController的startDrag中,具体见源码 
     
    if(mDockListener!=null){    
     
          mDockListener.onDragStart(source, dragInfo, dragAction);  
     
            } 
     
      
     
     
     
    3. 
     
    // The order here is bottom to top. 
     
    dragController.addDropTarget(workspace); 
     
    dragController.addDropTarget(dockbar);    //hmg25 add for dock 
     
    dragController.addDropTarget(deleteZone); 
     
      

 

二、在layout-port的launcher.xml中增加

[xhtml] view plaincopy

    <!--hmg add for dock {  -->  
     
     <com.android.launcher2.DockBar 
     
            android:id="@+id/dockbar" 
     
            android:layout_width="fill_parent" 
     
            android:layout_height="@dimen/button_bar_height" 
     
            android:layout_gravity="bottom|center_horizontal" 
     
            android:background="@drawable/dock_bg" 
     
            launcher:direction="horizontal"> 
     
            <HorizontalScrollView android:id="@+id/dock_scroll_view"  
     
            android:scrollbars="none"  
     
            android:fadingEdge="none"  
     
            android:saveEnabled="false"  
     
            android:layout_width="fill_parent"  
     
            android:layout_height="fill_parent"> 
     
            <LinearLayout android:orientation="horizontal"  
     
            android:id="@+id/dock_item_holder"       
     
            android:saveEnabled="false"  
     
            android:layout_width="fill_parent"  
     
            android:layout_height="fill_parent"> 
     
             <com.android.launcher2.HandleView   //默认将allapp按钮添加进去 
     
                android:id="@+id/all_apps_button" 
     
                android:layout_centerHorizontal="true" 
     
                android:src="/blog_article/@drawable/all_apps_button/index.html" 
     
                launcher:direction="horizontal"         
     
                android:layout_width="fill_parent" 
     
                android:layout_height="fill_parent" 
     
                android:focusable="true" 
     
                android:clickable="true" 
     
                /> 
     
            </LinearLayout> 
     
        </HorizontalScrollView> 
     
    </com.android.launcher2.DockBar> 
     
     <!--hmg add for dock  } -->   

 

三、创建自定义的类:

[java] view plaincopy

    public class DockBar extends LinearLayout implements DropTarget, DragSource, 
     
    DragController.DragListener,View.OnLongClickListener { 
     
      
     
    @Override 
     
        public boolean acceptDrop(DragSource source, int x, int y, int xOffset,int yOffset,DragView dragView, Object dragInfo) {                  
     
         //接受什么类型的图标         
     
          Log.i("hmg", "DockBar->acceptDrop"); 
     
         final ItemInfo item = (ItemInfo) dragInfo;        
     
         if (item.itemType == LauncherSettings.Favorites.ITEM_TYPE_APPWIDGET                 
     
         || item.itemType == LauncherSettings.Favorites.ITEM_TYPE_LIVE_FOLDER                 
     
         || item.itemType == LauncherSettings.Favorites.ITEM_TYPE_USER_FOLDER                  
     
         || item.itemType == LauncherSettings.Favorites.ITEM_TYPE_WIDGET_PHOTO_FRAME                 
     
         || item.itemType == LauncherSettings.Favorites.ITEM_TYPE_WIDGET_SEARCH                 
     
         || item.itemType == LauncherSettings.Favorites.ITEM_TYPE_WIDGET_CLOCK) {          
     
         return false;         
     
         }   
     
         return true;  
     
         } 
     
      
     
      
     
      
     
    //拖拽释放时响应下边函数 
     
    @Override 
     
        public void onDrop(DragSource source, int x, int y, int xOffset, 
     
             int yOffset, DragView dragView, Object dragInfo) { 
     
      
     
         int position=0; 
     
         position=getLocation(x); //根据释放时的坐标,获取插入位置 
     
         addItemAt((ItemInfo)dragInfo, position);     
     
        } 
     
    /*
    
         * 传入x坐标,判断新图标的位置,此处仅判断竖屏
    
         */ 
     
        public int getLocation(int x){    
     
                for(int i=0;i<mItemHolder.getChildCount();i++){    
     
                    View iv = mItemHolder.getChildAt(i);            
     
                    int[] position = new int[2]; 
     
                    //获取坐标,如果要适应横屏可以稍作修改,比较Y值 
     
                    iv.getLocationOnScreen(position); 
     
                    //判断释放时新增的图标在原图标的之前还是之后 
     
                     if(x<=(position[0]+(iv.getWidth()/2))){                         
     
                             return i;                       
     
                     }                     
     
                 }     
     
                 return mItemHolder.getChildCount();    
     
             }   
     
      
     
      
     
    private void addItemAt(ItemInfo itemInfo, int position) 
     
        { 
     
         View view=null; 
     
         switch (itemInfo.itemType) { 
     
         case LauncherSettings.Favorites.ITEM_TYPE_APPLICATION: 
     
         case LauncherSettings.Favorites.ITEM_TYPE_SHORTCUT:      
     
             ShortcutInfo shortcutInfo; 
     
         // 拖拽图标来自于app list 
     
         if(itemInfo.container ==NO_ID&& itemInfo instanceof ApplicationInfo)         
     
         { 
     
             //与来自桌面的图标包含信息不一样,具体看源码 
     
             shortcutInfo= new ShortcutInfo((ApplicationInfo)itemInfo); 
     
         } 
     
         else 
     
         shortcutInfo = (ShortcutInfo)itemInfo; //拖拽图标来自桌面 
     
         //调用Launcher中的CreateDockShortcut生成一个imageView 
     
         view = mLauncher. CreateDockShortcut (shortcutInfo); 
     
          view.setOnLongClickListener(this);   
     
           break; 
     
         case LauncherSettings.Favorites.ITEM_TYPE_USER_FOLDER: 
     
             break; 
     
         default: 
     
             throw new IllegalStateException("Unknown item type: " 
     
                 + itemInfo.itemType); 
     
         }    
     
         mItemHolder.addView(view, position);      
     
    } 
     
      
     
    之所以将新建view用Launcher. CreateDockShortcut是想直接使用Launcher中的单击事件。 
     
    View CreateDockShortcut (ShortcutInfo shortcutInfo) 
     
        {  
     
         Context context=getApplicationContext(); 
     
         ImageView imageView =new ImageView(context);     
     
         imageView.setImageBitmap(shortcutInfo.mIcon); 
     
         imageView.setOnClickListener(this); 
     
         imageView.setFocusable(true); 
     
         imageView.setTag(shortcutInfo); 
     
         imageView.setMinimumWidth(100); 
     
         return imageView; 
     
        } 
     
      
     
     在dock上长按,拖拽交换位置或者拖拽出去 
     
    @Override 
     
        public boolean onLongClick(View v) { 
     
         // TODO Auto-generated method stub 
     
          if (mLauncher.isAllAppsVisible()) 
     
             mLauncher.closeAllApps(false); 
     
             mSelectedView = v;         
     
    //开始拖拽 
     
         mDragController.startDrag(v, this, v.getTag(), 
     
             DragController.DRAG_ACTION_MOVE); 
     
          removeSelectedItem(); 
     
             return true; 
     
        } 
     
    private void removeSelectedItem() 
     
        { 
     
          if (mSelectedView == null) 
     
            return; 
     
          mItemHolder.removeView(mSelectedView); 
     
        } 



代码修改了不少地方,具体看代码,修改的地方我都标注啦 ~~欢迎大家指教,相互交流~~

源码地址:http://download.csdn.net/source/3142047

    
最新技术文章:
▪Android开发之登录验证实例教程
▪Android开发之注册登录方法示例
▪Android获取手机SIM卡运营商信息的方法
▪Android实现将已发送的短信写入短信数据库的...
▪Android发送短信功能代码
▪Android根据电话号码获得联系人头像实例代码
▪Android中GPS定位的用法实例
▪Android实现退出时关闭所有Activity的方法
▪Android实现文件的分割和组装
▪Android录音应用实例教程
▪Android双击返回键退出程序的实现方法
▪Android实现侦听电池状态显示、电量及充电动...
▪Android获取当前已连接的wifi信号强度的方法
▪Android实现动态显示或隐藏密码输入框的内容
▪根据USER-AGENT判断手机类型并跳转到相应的app...
▪Android Touch事件分发过程详解
▪Android中实现为TextView添加多个可点击的文本
▪Android程序设计之AIDL实例详解
▪Android显式启动与隐式启动Activity的区别介绍
▪Android按钮单击事件的四种常用写法总结
▪Android消息处理机制Looper和Handler详解
▪Android实现Back功能代码片段总结
▪Android实用的代码片段 常用代码总结
▪Android实现弹出键盘的方法
▪Android中通过view方式获取当前Activity的屏幕截...
▪Android提高之自定义Menu(TabMenu)实现方法
▪Android提高之多方向抽屉实现方法
▪Android提高之MediaPlayer播放网络音频的实现方法...
▪Android提高之MediaPlayer播放网络视频的实现方法...
▪Android提高之手游转电视游戏的模拟操控
 


站内导航:


特别声明:169IT网站部分信息来自互联网,如果侵犯您的权利,请及时告知,本站将立即删除!

©2012-2021,,E-mail:www_#163.com(请将#改为@)

浙ICP备11055608号-3