Äú¿ÉÒÔ¾èÖú£¬Ö§³ÖÎÒÃǵĹ«ÒæÊÂÒµ¡£

1Ôª 10Ôª 50Ôª





ÈÏÖ¤Â룺  ÑéÖ¤Âë,¿´²»Çå³þ?Çëµã»÷Ë¢ÐÂÑéÖ¤Âë ±ØÌî



  ÇóÖª ÎÄÕ ÎÄ¿â Lib ÊÓÆµ iPerson ¿Î³Ì ÈÏÖ¤ ×Éѯ ¹¤¾ß ½²×ù Modeler   Code  
»áÔ±   
 
   
 
 
     
   
 ¶©ÔÄ
  ¾èÖú
Android VolleyÍêÈ«½âÎö(¶þ)£¬Ê¹ÓÃVolley¼ÓÔØÍøÂçͼƬ
 
×÷Õß sinyu890807µÄ²©¿Í£¬»ðÁú¹ûÈí¼þ    ·¢²¼ÓÚ 2014-07-17
  3059  次浏览      27
 

ÔÚÉÏһƪÎÄÕÂÖУ¬ÎÒÃÇÁ˽âÁËVolleyµ½µ×ÊÇʲô£¬ÒÔ¼°ËüµÄ»ù±¾Ó÷¨¡£±¾ÆªÎÄÕÂÖÐÎÒÃǼ´½«Ñ§Ï°¹ØÓÚVolley¸ü¼Ó¸ß¼¶µÄÓ÷¨£¬ÈçºÎÄ㻹ûÓп´¹ýÎÒµÄÉÏһƪÎÄյϰ£¬½¨ÒéÏÈÈ¥ÔĶÁAndroid VolleyÍêÈ«½âÎö(Ò»)£¬³õʶVolleyµÄ»ù±¾Ó÷¨¡£

ÔÚÉÏÆªÎÄÕÂÖÐÓÐÌáµ½¹ý£¬VolleyÊǽ«AsyncHttpClientºÍUniversal-Image-LoaderµÄÓŵ㼯³ÉÓÚÒ»ÉíµÄÒ»¸ö¿ò¼Ü¡£ÎÒÃǶ¼ÖªµÀ£¬Universal-Image-Loader¾ß±¸·Ç³£Ç¿´óµÄ¼ÓÔØÍøÂçͼƬµÄ¹¦ÄÜ£¬¶øÊ¹ÓÃVolley£¬ÎÒÃÇÒ²¿ÉÒÔʵÏÖ»ù±¾ÀàËÆµÄЧ¹û£¬²¢ÇÒÔÚÐÔÄÜÉÏÒ²ºÀ²»Ñ·É«ÓÚUniversal-Image-Loader£¬ÏÂÃæÎÒÃǾÍÀ´¾ßÌåѧϰһϰɡ£

1. ImageRequestµÄÓ÷¨

Ç°ÃæÎÒÃÇÒѾ­Ñ§Ï°¹ýÁËStringRequestºÍJsonRequestµÄÓ÷¨£¬²¢ÇÒ×ܽá³öÁËËüÃǵÄÓ÷¨¶¼ÊǷdz£ÀàËÆµÄ£¬»ù±¾¾ÍÊǽøÐÐÒÔÏÂÈý²½²Ù×÷¼´¿É£º

1. ´´½¨Ò»¸öRequestQueue¶ÔÏó¡£

2. ´´½¨Ò»¸öRequest¶ÔÏó¡£

3. ½«Request¶ÔÏóÌí¼Óµ½RequestQueueÀïÃæ¡£

ÆäÖУ¬StringRequestºÍJsonRequest¶¼ÊǼ̳Ð×ÔRequestµÄ£¬ËùÒÔËüÃǵÄÓ÷¨²Å»áÈç´ËÀàËÆ¡£ÄÇô²»Óöà˵£¬½ñÌìÎÒÃÇҪѧϰµÄImageRequest£¬ÏàÐÅÄã´ÓÃû×ÖÉϾÍÒѾ­²Â³öÀ´ÁË£¬ËüÒ²ÊǼ̳Ð×ÔRequestµÄ£¬Òò´ËËüµÄÓ÷¨Ò²ÊÇ»ù±¾ÏàͬµÄ£¬Ê×ÏÈÐèÒª»ñÈ¡µ½Ò»¸öRequestQueue¶ÔÏ󣬿ÉÒÔµ÷ÓÃÈçÏ·½·¨»ñÈ¡µ½£º

git clone https://android.googlesource.com/platform/frameworks/volley

½ÓÏÂÀ´×ÔȻҪȥnew³öÒ»¸öImageRequest¶ÔÏóÁË£¬´úÂëÈçÏÂËùʾ£º

ImageRequest imageRequest = new ImageRequest(  
"http://developer.android.com/images/home/aw_dac.png",
new Response.Listener<Bitmap>() {
@Override
public void onResponse(Bitmap response) {
imageView.setImageBitmap(response);
}
}, 0, 0, Config.RGB_565, new Response.ErrorListener() {
@Override
public void onErrorResponse(VolleyError error) {
imageView.setImageResource(R.drawable.default_image);
}
});

¿ÉÒÔ¿´µ½£¬ImageRequestµÄ¹¹Ô캯Êý½ÓÊÕÁù¸ö²ÎÊý£¬µÚÒ»¸ö²ÎÊý¾ÍÊÇͼƬµÄURLµØÖ·£¬Õâ¸öûʲôÐèÒª½âÊ͵ġ£µÚ¶þ¸ö²ÎÊýÊÇͼƬÇëÇó³É¹¦µÄ»Øµ÷£¬ÕâÀïÎÒÃǰѷµ»ØµÄBitmap²ÎÊýÉèÖõ½ImageViewÖС£µÚÈýµÚËĸö²ÎÊý·Ö±ðÓÃÓÚÖ¸¶¨ÔÊÐíͼƬ×î´óµÄ¿í¶ÈºÍ¸ß¶È£¬Èç¹ûÖ¸¶¨µÄÍøÂçͼƬµÄ¿í¶È»ò¸ß¶È´óÓÚÕâÀïµÄ×î´óÖµ£¬Ôò»á¶ÔͼƬ½øÐÐѹËõ£¬Ö¸¶¨³É0µÄ»°¾Í±íʾ²»¹ÜͼƬÓжà´ó£¬¶¼²»»á½øÐÐѹËõ¡£µÚÎå¸ö²ÎÊýÓÃÓÚÖ¸¶¨Í¼Æ¬µÄÑÕÉ«ÊôÐÔ£¬Bitmap.ConfigÏµļ¸¸ö³£Á¿¶¼¿ÉÒÔÔÚÕâÀïʹÓã¬ÆäÖÐARGB_8888¿ÉÒÔչʾ×îºÃµÄÑÕÉ«ÊôÐÔ£¬Ã¿¸öͼƬÏñËØÕ¼¾Ý4¸ö×ֽڵĴóС£¬¶øRGB_565Ôò±íʾÿ¸öͼƬÏñËØÕ¼¾Ý2¸ö×Ö½Ú´óС¡£µÚÁù¸ö²ÎÊýÊÇͼƬÇëÇóʧ°ÜµÄ»Øµ÷£¬ÕâÀïÎÒÃǵ±ÇëÇóʧ°ÜʱÔÚImageViewÖÐÏÔʾһÕÅĬÈÏͼƬ¡£

×îºó½«Õâ¸öImageRequest¶ÔÏóÌí¼Óµ½RequestQueueÀï¾Í¿ÉÒÔÁË£¬ÈçÏÂËùʾ£º

mQueue.add(imageRequest);

ÏÖÔÚÈç¹ûÔËÐÐһϳÌÐò£¬²¢³¢ÊÔ·¢³öÕâÑùÒ»ÌõÍøÂçÇëÇ󣬺ܿì¾ÍÄÜ¿´µ½ÍøÂçÉϵÄͼƬÔÚImageViewÖÐÏÔʾ³öÀ´ÁË£¬ÈçÏÂͼËùʾ£º

2. ImageLoaderµÄÓ÷¨

Èç¹ûÄã¾õµÃImageRequestÒѾ­·Ç³£ºÃÓÃÁË£¬ÄÇÎÒÖ»ÄÜ˵ÄãÌ«ÈÝÒ×Âú×ãÁË ^_^¡£Êµ¼ÊÉÏ£¬VolleyÔÚÇëÇóÍøÂçͼƬ·½Ãæ¿ÉÒÔ×öµ½µÄ»¹Ô¶Ô¶²»Ö¹ÕâЩ£¬¶øImageLoader¾ÍÊÇÒ»¸öºÜºÃµÄÀý×Ó¡£ImageLoaderÒ²¿ÉÒÔÓÃÓÚ¼ÓÔØÍøÂçÉϵÄͼƬ£¬²¢ÇÒËüµÄÄÚ²¿Ò²ÊÇʹÓÃImageRequestÀ´ÊµÏֵ쬲»¹ýImageLoaderÃ÷ÏÔÒª±ÈImageRequest¸ü¼Ó¸ßЧ£¬ÒòΪËü²»½ö¿ÉÒÔ°ïÎÒÃǶÔͼƬ½øÐлº´æ£¬»¹¿ÉÒÔ¹ýÂ˵ôÖØ¸´µÄÁ´½Ó£¬±ÜÃâÖØ¸´·¢ËÍÇëÇó¡£

ÓÉÓÚImageLoaderÒѾ­²»ÊǼ̳Ð×ÔRequestµÄÁË£¬ËùÒÔËüµÄÓ÷¨Ò²ºÍÎÒÃÇ֮ǰѧµ½µÄÄÚÈÝÓÐËù²»Í¬£¬×ܽáÆðÀ´´óÖ¿ÉÒÔ·ÖΪÒÔÏÂËIJ½£º

1. ´´½¨Ò»¸öRequestQueue¶ÔÏó¡£

2. ´´½¨Ò»¸öImageLoader¶ÔÏó¡£

3. »ñȡһ¸öImageListener¶ÔÏó¡£

4. µ÷ÓÃImageLoaderµÄget()·½·¨¼ÓÔØÍøÂçÉϵÄͼƬ¡£

ÏÂÃæÎÒÃǾÍÀ´°´ÕÕÕâ¸ö²½Ö裬ѧϰһÏÂImageLoaderµÄÓ÷¨°É¡£Ê×ÏȵÚÒ»²½µÄ´´½¨RequestQueue¶ÔÏóÎÒÃÇÒѾ­Ð´¹ýºÜ¶à±éÁË£¬ÏàÐÅÒѾ­²»ÓÃÔÙÖØ¸´½éÉÜÁË£¬ÄÇô¾Í´ÓµÚ¶þ²½¿ªÊ¼Ñ§Ï°°É£¬Ð½¨Ò»¸öImageLoader¶ÔÏ󣬴úÂëÈçÏÂËùʾ£º

ImageLoader imageLoader = new ImageLoader(mQueue, new ImageCache() {  
@Override
public void putBitmap(String url, Bitmap bitmap) {
}

@Override
public Bitmap getBitmap(String url) {
return null;
}
});

¿ÉÒÔ¿´µ½£¬ImageLoaderµÄ¹¹Ô캯Êý½ÓÊÕÁ½¸ö²ÎÊý£¬µÚÒ»¸ö²ÎÊý¾ÍÊÇRequestQueue¶ÔÏ󣬵ڶþ¸ö²ÎÊýÊÇÒ»¸öImageCache¶ÔÏó£¬ÕâÀïÎÒÃÇÏÈnew³öÒ»¸ö¿ÕµÄImageCacheµÄʵÏÖ¼´¿É¡£
½ÓÏÂÀ´ÐèÒª»ñȡһ¸öImageListener¶ÔÏ󣬴úÂëÈçÏÂËùʾ£º

ImageListener listener = ImageLoader.getImageListener(imageView,  
R.drawable.default_image, R.drawable.failed_image);

ÎÒÃÇͨ¹ýµ÷ÓÃImageLoaderµÄgetImageListener()·½·¨Äܹ»»ñÈ¡µ½Ò»¸öImageListener¶ÔÏó£¬getImageListener()·½·¨½ÓÊÕÈý¸ö²ÎÊý£¬µÚÒ»¸ö²ÎÊýÖ¸¶¨ÓÃÓÚÏÔʾͼƬµÄImageView¿Ø¼þ£¬µÚ¶þ¸ö²ÎÊýÖ¸¶¨¼ÓÔØÍ¼Æ¬µÄ¹ý³ÌÖÐÏÔʾµÄͼƬ£¬µÚÈý¸ö²ÎÊýÖ¸¶¨¼ÓÔØÍ¼Æ¬Ê§°ÜµÄÇé¿öÏÂÏÔʾµÄͼƬ¡£
×îºó£¬µ÷ÓÃImageLoaderµÄget()·½·¨À´¼ÓÔØÍ¼Æ¬£¬´úÂëÈçÏÂËùʾ£º

imageLoader.get("http://img.my.csdn.net/uploads/201404/13/1397393290_5765.jpeg", listener); 

get()·½·¨½ÓÊÕÁ½¸ö²ÎÊý£¬µÚÒ»¸ö²ÎÊý¾ÍÊÇͼƬµÄURLµØÖ·£¬µÚ¶þ¸ö²ÎÊýÔòÊǸոջñÈ¡µ½µÄImageListener¶ÔÏó¡£µ±È»£¬Èç¹ûÄãÏë¶ÔͼƬµÄ´óС½øÐÐÏÞÖÆ£¬Ò²¿ÉÒÔʹÓÃget()·½·¨µÄÖØÔØ£¬Ö¸¶¨Í¼Æ¬ÔÊÐíµÄ×î´ó¿í¶ÈºÍ¸ß¶È£¬ÈçÏÂËùʾ£º

imageLoader.get("http://img.my.csdn.net/uploads/201404/13/1397393290_5765.jpeg",  
listener, 200, 200);

ÏÖÔÚÔËÐÐһϳÌÐò²¢¿ªÊ¼¼ÓÔØÍ¼Æ¬£¬Ä㽫¿´µ½ImageViewÖлáÏÈÏÔʾһÕÅĬÈϵÄͼƬ£¬µÈµ½ÍøÂçÉϵÄͼƬ¼ÓÔØÍê³Éºó£¬ImageViewÔò»á×Ô¶¯ÏÔʾ¸Ãͼ£¬Ð§¹ûÈçÏÂͼËùʾ¡£

ËäÈ»ÏÖÔÚÎÒÃÇÒѾ­ÕÆÎÕÁËImageLoaderµÄÓ÷¨£¬µ«ÊǸղŽéÉܵÄImageLoaderµÄÓŵãÈ´»¹Ã»ÓÐʹÓõ½¡£ÎªÊ²Ã´ÄØ£¿ÒòΪÕâÀï´´½¨µÄImageCache¶ÔÏóÊÇÒ»¸ö¿ÕµÄʵÏÖ£¬ÍêȫûÄÜÆðµ½Í¼Æ¬»º´æµÄ×÷Óá£Æäʵдһ¸öImageCacheÒ²·Ç³£¼òµ¥£¬µ«ÊÇÈç¹ûÏëҪдһ¸öÐÔÄܷdz£ºÃµÄImageCache£¬×îºÃ¾ÍÒª½èÖúAndroidÌṩµÄLruCache¹¦ÄÜÁË£¬Èç¹ûÄã¶ÔLruCache»¹²»Á˽⣬¿ÉÒԲο¼ÎÒ֮ǰµÄһƪ²©¿ÍAndroid¸ßЧ¼ÓÔØ´óͼ¡¢¶àͼ½â¾ö·½°¸£¬ÓÐЧ±ÜÃâ³ÌÐòOOM¡£

ÕâÀïÎÒÃÇн¨Ò»¸öBitmapCache²¢ÊµÏÖÁËImageCache½Ó¿Ú£¬ÈçÏÂËùʾ£º

public class BitmapCache implements ImageCache {  

private LruCache<String, Bitmap> mCache;

public BitmapCache() {
int maxSize = 10 * 1024 * 1024;
mCache = new LruCache<String, Bitmap>(maxSize) {
@Override
protected int sizeOf(String key, Bitmap bitmap) {
return bitmap.getRowBytes() * bitmap.getHeight();
}
};
}

@Override
public Bitmap getBitmap(String url) {
return mCache.get(url);
}

@Override
public void putBitmap(String url, Bitmap bitmap) {
mCache.put(url, bitmap);
}

}

¿ÉÒÔ¿´µ½£¬ÕâÀïÎÒÃǽ«»º´æÍ¼Æ¬µÄ´óСÉèÖÃΪ10M¡£½Ó×ÅÐ޸Ĵ´½¨ImageLoaderʵÀýµÄ´úÂ룬µÚ¶þ¸ö²ÎÊý´«ÈëBitmapCacheµÄʵÀý£¬ÈçÏÂËùʾ£º

ImageLoader imageLoader = new ImageLoader(mQueue, new BitmapCache()); 

ÕâÑùÎÒÃǾͰÑImageLoaderµÄ¹¦ÄÜÓÅÊÆ³ä·ÖÀûÓÃÆðÀ´ÁË¡£

3. NetworkImageViewµÄÓ÷¨

³ýÁËÒÔÉÏÁ½ÖÖ·½Ê½Ö®Í⣬Volley»¹ÌṩÁ˵ÚÈýÖÖ·½Ê½À´¼ÓÔØÍøÂçͼƬ£¬¼´Ê¹ÓÃNetworkImageView¡£²»Í¬ÓÚÒÔÉÏÁ½ÖÖ·½Ê½£¬NetworkImageViewÊÇÒ»¸ö×Ô¶¨Òå¿ØÖÆ£¬ËüÊǼ̳Ð×ÔImageViewµÄ£¬¾ß±¸ImageView¿Ø¼þµÄËùÓй¦ÄÜ£¬²¢ÇÒÔÚÔ­ÉúµÄ»ù´¡Ö®ÉϼÓÈëÁ˼ÓÔØÍøÂçͼƬµÄ¹¦ÄÜ¡£NetworkImageView¿Ø¼þµÄÓ÷¨Òª±ÈǰÁ½ÖÖ·½Ê½¸ü¼Ó¼òµ¥£¬´óÖ¿ÉÒÔ·ÖΪÒÔÏÂÎå²½£º

1. ´´½¨Ò»¸öRequestQueue¶ÔÏó¡£

2. ´´½¨Ò»¸öImageLoader¶ÔÏó¡£

3. ÔÚ²¼¾ÖÎļþÖÐÌí¼ÓÒ»¸öNetworkImageView¿Ø¼þ¡£

4. ÔÚ´úÂëÖлñÈ¡¸Ã¿Ø¼þµÄʵÀý¡£

5. ÉèÖÃÒª¼ÓÔØµÄͼƬµØÖ·¡£

ÆäÖУ¬µÚÒ»µÚ¶þ²½ºÍImageLoaderµÄÓ÷¨ÊÇÍêȫһÑùµÄ£¬Òò´ËÕâÀïÎÒÃǾʹӵÚÈý²½¿ªÊ¼Ñ§Ï°ÁË¡£Ê×ÏÈÐ޸IJ¼¾ÖÎļþÖеĴúÂ룬ÔÚÀïÃæ¼ÓÈëNetworkImageView¿Ø¼þ£¬ÈçÏÂËùʾ£º

<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"  
android:layout_width="fill_parent"
android:layout_height="fill_parent"
android:orientation="vertical" >

<Button
android:id="@+id/button"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:text="Send Request" />

<com.android.volley.toolbox.NetworkImageView
android:id="@+id/network_image_view"
android:layout_width="200dp"
android:layout_height="200dp"
android:layout_gravity="center_horizontal"
/>

</LinearLayout>

½Ó×ÅÔÚActivity»ñÈ¡µ½Õâ¸ö¿Ø¼þµÄʵÀý£¬Õâ¾Í·Ç³£¼òµ¥ÁË£¬´úÂëÈçÏÂËùʾ£º

networkImageView = (NetworkImageView) findViewById(R.id.network_image_view);  

µÃµ½ÁËNetworkImageView¿Ø¼þµÄʵÀýÖ®ºó£¬ÎÒÃÇ¿ÉÒÔµ÷ÓÃËüµÄsetDefaultImageResId()·½·¨¡¢setErrorImageResId()·½·¨ºÍsetImageUrl()·½·¨À´·Ö±ðÉèÖüÓÔØÖÐÏÔʾµÄͼƬ£¬¼ÓÔØÊ§°ÜʱÏÔʾµÄͼƬ£¬ÒÔ¼°Ä¿±êͼƬµÄURLµØÖ·£¬ÈçÏÂËùʾ£º

networkImageView.setDefaultImageResId(R.drawable.default_image);  
networkImageView.setErrorImageResId(R.drawable.failed_image);
networkImageView.setImageUrl("http://img.my.csdn.net/uploads/201404/13/1397393290_5765.jpeg",
imageLoader);

ÆäÖУ¬setImageUrl()·½·¨½ÓÊÕÁ½¸ö²ÎÊý£¬µÚÒ»¸ö²ÎÊýÓÃÓÚÖ¸¶¨Í¼Æ¬µÄURLµØÖ·£¬µÚ¶þ¸ö²ÎÊýÔòÊÇÇ°Ãæ´´½¨ºÃµÄImageLoader¶ÔÏó¡£
ºÃÁË£¬¾ÍÊÇÕâô¼òµ¥£¬ÏÖÔÚÖØÐÂÔËÐÐһϳÌÐò£¬Ä㽫¿´µ½ºÍʹÓÃImageLoaderÀ´¼ÓÔØÍ¼Æ¬Ò»Ä£Ò»ÑùµÄЧ¹û£¬ÕâÀïÎҾͲ»ÔÙ½ØÍ¼ÁË¡£

ÕâʱÓеÄÅóÓÑ¿ÉÄܾͻáÎÊÁË£¬Ê¹ÓÃImageRequestºÍImageLoaderÕâÁ½ÖÖ·½Ê½À´¼ÓÔØÍøÂçͼƬ£¬¶¼¿ÉÒÔ´«ÈëÒ»¸ö×î´ó¿í¶ÈºÍ¸ß¶ÈµÄ²ÎÊýÀ´¶ÔͼƬ½øÐÐѹËõ£¬¶øNetworkImageViewÖÐÔòÍêȫûÓÐÌṩÉèÖÃ×î´ó¿í¶ÈºÍ¸ß¶ÈµÄ·½·¨£¬ÄÇôÊDz»ÊÇʹÓÃNetworkImageViewÀ´¼ÓÔØµÄͼƬ¶¼²»»á½øÐÐѹËõÄØ£¿

Æäʵ²¢²»ÊÇÕâÑùµÄ£¬NetworkImageView²¢²»ÐèÒªÌṩÈκÎÉèÖÃ×î´ó¿í¸ßµÄ·½·¨Ò²Äܹ»¶Ô¼ÓÔØµÄͼƬ½øÐÐѹËõ¡£ÕâÊÇÓÉÓÚNetworkImageViewÊÇÒ»¸ö¿Ø¼þ£¬ÔÚ¼ÓÔØÍ¼Æ¬µÄʱºòËü»á×Ô¶¯»ñÈ¡×ÔÉíµÄ¿í¸ß£¬È»ºó¶Ô±ÈÍøÂçͼƬµÄ¿í¶È£¬ÔÙ¾ö¶¨ÊÇ·ñÐèÒª¶ÔͼƬ½øÐÐѹËõ¡£Ò²¾ÍÊÇ˵£¬Ñ¹Ëõ¹ý³ÌÊÇÔÚÄÚ²¿ÍêÈ«×Ô¶¯»¯µÄ£¬²¢²»ÐèÒªÎÒÃǹØÐÄ£¬NetworkImageView»áʼÖÕ³ÊÏÖ¸øÎÒÃÇÒ»ÕÅ´óС¸Õ¸ÕºÃµÄÍøÂçͼƬ£¬²»»á¶àÕ¼ÓÃÈκÎÒ»µãÄڴ棬ÕâÒ²ÊÇNetworkImageView×î¼òµ¥ºÃÓõÄÒ»µã°É¡£

µ±È»ÁË£¬Èç¹ûÄã²»Ïë¶ÔͼƬ½øÐÐѹËõµÄ»°£¬ÆäʵҲºÜ¼òµ¥£¬Ö»ÐèÒªÔÚ²¼¾ÖÎļþÖаÑNetworkImageViewµÄlayout_widthºÍlayout_height¶¼ÉèÖóÉwrap_content¾Í¿ÉÒÔÁË£¬ÕâÑùNetworkImageView¾Í»á½«¸ÃͼƬµÄԭʼ´óСչʾ³öÀ´£¬²»»á½øÐÐÈκÎѹËõ¡£

ÕâÑùÎÒÃǾͰÑʹÓÃVolleyÀ´¼ÓÔØÍøÂçͼƬµÄÓ÷¨¶¼Ñ§Ï°ÍêÁË¡£

   
3059 ´Îä¯ÀÀ       27
 
Ïà¹ØÎÄÕÂ

ÊÖ»úÈí¼þ²âÊÔÓÃÀýÉè¼ÆÊµ¼ù
ÊÖ»ú¿Í»§¶ËUI²âÊÔ·ÖÎö
iPhoneÏûÏ¢ÍÆËÍ»úÖÆÊµÏÖÓë̽ÌÖ
AndroidÊÖ»ú¿ª·¢£¨Ò»£©
 
Ïà¹ØÎĵµ

Android_UI¹Ù·½Éè¼Æ½Ì³Ì
ÊÖ»ú¿ª·¢Æ½Ì¨½éÉÜ
androidÅÄÕÕ¼°ÉÏ´«¹¦ÄÜ
Android½²ÒåÖÇÄÜÊÖ»ú¿ª·¢
Ïà¹Ø¿Î³Ì

Android¸ß¼¶Òƶ¯Ó¦ÓóÌÐò
Androidϵͳ¿ª·¢
AndroidÓ¦Óÿª·¢
ÊÖ»úÈí¼þ²âÊÔ
×îл¼Æ»®
DeepSeekÔÚÈí¼þ²âÊÔÓ¦ÓÃʵ¼ù 4-12[ÔÚÏß]
DeepSeek´óÄ£ÐÍÓ¦Óÿª·¢Êµ¼ù 4-19[ÔÚÏß]
UAF¼Ü¹¹ÌåϵÓëʵ¼ù 4-11[±±¾©]
AIÖÇÄÜ»¯Èí¼þ²âÊÔ·½·¨Óëʵ¼ù 5-23[ÉϺ£]
»ùÓÚ UML ºÍEA½øÐзÖÎöÉè¼Æ 4-26[±±¾©]
ÒµÎñ¼Ü¹¹Éè¼ÆÓ뽨ģ 4-18[±±¾©]

androidÈË»ú½çÃæÖ¸ÄÏ
AndroidÊÖ»ú¿ª·¢£¨Ò»£©
AndroidÊÖ»ú¿ª·¢£¨¶þ£©
AndroidÊÖ»ú¿ª·¢£¨Èý£©
AndroidÊÖ»ú¿ª·¢£¨ËÄ£©
iPhoneÏûÏ¢ÍÆËÍ»úÖÆÊµÏÖ̽ÌÖ
ÊÖ»úÈí¼þ²âÊÔÓÃÀýÉè¼ÆÊµ¼ù
ÊÖ»ú¿Í»§¶ËUI²âÊÔ·ÖÎö
ÊÖ»úÈí¼þ×Ô¶¯»¯²âÊÔÑо¿±¨¸æ


Android¸ß¼¶Òƶ¯Ó¦ÓóÌÐò
AndroidÓ¦Óÿª·¢
Androidϵͳ¿ª·¢
ÊÖ»úÈí¼þ²âÊÔ
ǶÈëʽÈí¼þ²âÊÔ
AndroidÈí¡¢Ó²¡¢ÔÆÕûºÏ


ÁìÏÈIT¹«Ë¾ android¿ª·¢Æ½Ì¨×î¼Ñʵ¼ù
±±¾© Android¿ª·¢¼¼Êõ½ø½×
ijÐÂÄÜÔ´ÁìÓòÆóÒµ Android¿ª·¢¼¼Êõ
ijº½Ì칫˾ Android¡¢IOSÓ¦ÓÃÈí¼þ¿ª·¢
°¢¶û¿¨ÌØ LinuxÄÚºËÇý¶¯
°¬Ä¬Éú ǶÈëʽÈí¼þ¼Ü¹¹Éè¼Æ
Î÷ÃÅ×Ó Ç¶Èëʽ¼Ü¹¹Éè¼Æ