北京时间7月13日消息,根据Dice网站最新的调查显示,本月“最急需的十大IT技术”Java开发人员排到首位,紧随其后的是移动应用程序开发人员和NET开发人员。
该数据显示,软件开发人员名列第四。不过这是一个笼统的称呼,因为在IT界基本上所有的开发人员都是在开发软件。
Dice网站的信息显示,在人才招聘市场,现在各个公司的招聘部门经理和主管们经常提及这些上榜的岗位,其频繁程度已经是其他工作岗位的二倍甚至三倍。根据招聘公司的报告显示,在全美大约有85,000个就业机会,其中和IT产业相关的就多达36,000个。
Dice网站的爱丽丝 希尔(Alice Hill)认为,有如此多的公司急需这些技术人才,是由两方面的因素所导致的:一是迅速扩大的市场需求,比如说手机市场;另外一个就是对有经验人才的迫切需求。虽然子在招聘市场上以上所列举的人才是如此的紧缺,但是现在很多公司并没有耐心为这些岗位的从业人员提供足够的培训使其逐渐成长起来。
下面是市场最急需的10类技术人才:
1,Java开发人员
2,移动应用程序开发人员
3,NET开发人员
4,软件开发人员
5,网络安全
6,SAP
7,SharePoint
8,网页开发工程师
9,Active federal security clearance
10,网络工程师
1楼gyyuli3分钟前shuipinga www.gyyuli.com
Handler作为Activity的内部类有可能会导致内存泄露的问题。具体如何解决,在国外有人提出,如下:
Issue: Ensures that Handler classes do not hold on to a reference to an outer class
In Android, Handler classes should be static or leaks might occur. Messages enqueued on the application thread's MessageQueue also retain their target Handler. If the Handler is an inner class, its outer class will be retained as well. To avoid leaking the outer class, declare the Handler as a static nested class with a WeakReference to its outer class.
大体翻译如下:
Handler类应该应该为static类型,否则有可能造成泄露。在程序消息队列中排队的消息保持了对目标Handler类的应用。如果Handler是个内部类,那么它也会保持它所在的外部类的引用。为了避免泄露这个外部类,应该将Handler声明为static嵌套类,并且使用对外部类的弱应用。
使用范例:
static class MyHandler extends Handler { WeakReference<PopupActivity> mActivity; MyHandler(PopupActivity activity) { mActivity = new WeakReference<PopupActivity>(activity); } @Override public void handleMessage(Message msg) { PopupActivity theActivity = mActivity.get(); switch (msg.what) { case 0: theActivity.popPlay.setChecked(true); break; } } }; MyHandler ttsHandler = new MyHandler(this); private Cursor mCursor; private void test() { ttsHandler.sendEmptyMessage(0); }
}
现在很多应用都在第一次启动时提供一个简要的介绍,以左右滑动的效果来介绍应用的使用和基本情况。下面将实现一个简单的Demo
首先到SDK的extra目录下找到android-support-v4.jar
首先看一下工程结构:
<?xml version="1.0" encoding="utf-8"?> <FrameLayout xmlns:android="http://schemas.android.com/apk/res/android" android:layout_width="fill_parent" android:layout_height="fill_parent" android:orientation="vertical" > <android.support.v4.view.ViewPager android:id="@+id/guidePages" android:layout_width="fill_parent" android:layout_height="wrap_content" /> <RelativeLayout android:layout_width="fill_parent" android:layout_height="wrap_content" android:orientation="vertical" > <LinearLayout android:id="@+id/viewGroup" android:layout_width="fill_parent" android:layout_height="wrap_content" android:layout_alignParentBottom="true" android:layout_marginBottom="15dp" android:gravity="center_horizontal" android:orientation="horizontal" > </LinearLayout> </RelativeLayout> </FrameLayout>
然后新建page1.xml文件
<?xml version="1.0" encoding="utf-8"?> <LinearLayout xmlns:android="http://schemas.android.com/apk/res/android" android:layout_width="fill_parent" android:layout_height="fill_parent" android:orientation="vertical" > <ImageView android:layout_width="fill_parent" android:layout_height="fill_parent" android:background="@drawable/a" > </ImageView> </LinearLayout>
page2.xml、page3.xml一样,只要改变图片路径就行
然后编辑Activity
public class ViewPagerActivity extends Activity { private ViewPager viewPager; private ArrayList<View> pageViews; private ViewGroup main; private ViewGroup group; private ImageView imageView; private ImageView[] imageViews; @Override public void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState); this.requestWindowFeature(Window.FEATURE_NO_TITLE); setContentView(R.layout.main); LayoutInflater inflater = getLayoutInflater(); pageViews = new ArrayList<View>(); pageViews.add(inflater.inflate(R.layout.page1, null)); pageViews.add(inflater.inflate(R.layout.page2, null)); pageViews.add(inflater.inflate(R.layout.page3, null)); imageViews = new ImageView[pageViews.size()]; main = (ViewGroup)inflater.inflate(R.layout.main, null); //group是底部导航小圆点的布局 group = (ViewGroup)main.findViewById(R.id.viewGroup); viewPager = (ViewPager)main.findViewById(R.id.guidePages); for (int i = 0; i < pageViews.size(); i++) { imageView = new ImageView(ViewPagerActivity.this); imageView.setLayoutParams(new LayoutParams(LayoutParams.WRAP_CONTENT,LayoutParams.WRAP_CONTENT)); imageViews[i] = imageView; if (i == 0) { //默认选中第一张图片 imageViews[i].setBackgroundResource(R.drawable.indicator_f); } else { imageViews[i].setBackgroundResource(R.drawable.indicator); } group.addView(imageViews[i]); } setContentView(main); viewPager.setAdapter(new ViewPagerAdapter()); viewPager.setOnPageChangeListener(new ViewPagerChangeListener()); } class ViewPagerAdapter extends PagerAdapter{ @Override public int getCount() { return pageViews.size(); } @Override public boolean isViewFromObject(View arg0, Object arg1) { return arg0 == arg1; } @Override public void destroyItem(View arg0, int arg1, Object arg2) { ((ViewPager) arg0).removeView(pageViews.get(arg1)); } @Override public Object instantiateItem(View arg0, int arg1) { ((ViewPager) arg0).addView(pageViews.get(arg1)); return pageViews.get(arg1); } } class ViewPagerChangeListener implements OnPageChangeListener { @Override public void onPageScrollStateChanged(int arg0) { // TODO Auto-generated method stub } @Override public void onPageScrolled(int arg0, float arg1, int arg2) { // TODO Auto-generated method stub } @Override public void onPageSelected(int position) { for (int i = 0; i < imageViews.length; i++) { imageViews[position].setBackgroundResource(R.drawable.indicator_f); if (position != i) { imageViews[i].setBackgroundResource(R.drawable.indicator); } } } } }
运行,效果图如下,不是很美观,实际使用替换图片就行,需要源码的童鞋可以联系我。我的新浪微博 唐韧_Ryan