androi 多线程
Posted 每天进步一点点!
tags:
篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了androi 多线程相关的知识,希望对你有一定的参考价值。
<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android" xmlns:tools="http://schemas.android.com/tools" android:layout_width="match_parent" android:layout_height="match_parent" android:orientation="vertical" android:paddingBottom="@dimen/activity_vertical_margin" android:paddingLeft="@dimen/activity_horizontal_margin" android:paddingRight="@dimen/activity_horizontal_margin" android:paddingTop="@dimen/activity_vertical_margin" tools:context=".MainActivity" > <TextView android:id="@+id/textView1" android:layout_width="wrap_content" android:layout_height="wrap_content" android:text="当前网络:" /> <TextView android:id="@+id/txt_show" android:layout_width="wrap_content" android:layout_height="wrap_content" android:text="@string/hello_world" /> <Button android:id="@+id/button1" android:layout_width="match_parent" android:layout_height="wrap_content" android:text="Button" /> <Button android:id="@+id/button2" android:layout_width="match_parent" android:layout_height="wrap_content" android:text="Button" /> <ImageView android:id="@+id/imageView1" android:layout_width="278dp" android:layout_height="wrap_content" android:layout_weight="1.14" /> </LinearLayout>
java
package app.android.demo; import android.os.AsyncTask; import android.os.Bundle; import android.telephony.TelephonyManager; import android.util.Log; import java.io.IOException; import java.net.URL; import android.app.Activity; import android.content.Context; import android.graphics.drawable.Drawable; import android.net.ConnectivityManager; import android.net.NetworkInfo; import android.view.Menu; import android.view.View; import android.view.View.OnClickListener; import android.widget.Button; import android.widget.ImageView; import android.widget.TextView; import android.widget.Toast; public class MainActivity extends Activity { private ImageView mImageView = null ; Button mButton1; Button mButton2; Button mButton3; Button mButton4; TextView mTextView; TextView mTextView1; ConnectivityManager connectMgr; NetworkInfo[] networkInfo; //The image url we are downloading from internet . private final String IMAGE_URL1 = "http://a.hiphotos.baidu.com/image/pic/item/c2fdfc039245d688acbcd54ba0c27d1ed31b24a6.jpg" ; private final String IMAGE_URL2 = "http://imgsrc.baidu.com/forum/w%3D580/sign=f9f1029647166d223877159c76230945/b69ad3f9d72a6059892764472c34349b023bbaca.jpg" ; private final String IMAGE_URL3 = "http://static.open-open.com/lib/uploadImg/20130810/20130810175659_519.jpg" ; private final String IMAGE_URL4 = "http://imgsrc.baidu.com/forum/w%3D580/sign=f9f1029647166d223877159c76230945/b69ad3f9d72a6059892764472c34349b023bbaca.jpg" ; @Override protected void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState); setContentView(R.layout.activity_main); mImageView = (ImageView)this.findViewById(R.id.imageView1) ; mButton1=(Button) findViewById(R.id.button1); mButton2=(Button) findViewById(R.id.button2); mTextView=(TextView) findViewById(R.id.txt_show); mTextView1=(TextView) findViewById(R.id.textView1); if (isNetworkAvailable(MainActivity.this)) { mButton1.setOnClickListener(new Button1Lislen()); mButton2.setOnClickListener(new Button2Lislen()); mTextView1.setText("当前网络:=>可用"); Toast.makeText(getApplicationContext(), "当前有可用网络!", Toast.LENGTH_LONG).show(); } else { mTextView1.setText("当前网络:=>不可用"); Toast.makeText(getApplicationContext(), "当前没有可用网络!", Toast.LENGTH_LONG).show(); } } class Button1Lislen implements OnClickListener { @Override public void onClick(View v) { new Thread(new Runnable(){ @Override public void run() { // TODO Auto-generated method stub final Drawable drawable = loadImageFromNetwork(IMAGE_URL1); mImageView.post(new Runnable(){ @Override public void run() { // TODO Auto-generated method stub mImageView.setImageDrawable(drawable) ; }}) ; } }).start() ; } } private Drawable loadImageFromNetwork(String imageUrl) { Drawable drawable = null; try { drawable = Drawable.createFromStream( new URL(imageUrl).openStream(), "image.gif"); } catch (IOException e) { Log.d("test", e.getMessage()); } if (drawable == null) { Log.d("test", "null drawable"); } else { Log.d("test", "not null drawable"); } return drawable ; } class Button2Lislen implements OnClickListener { @Override public void onClick(View v) { new DownloadImageTask().execute(IMAGE_URL2) ; } } private class DownloadImageTask extends AsyncTask<String, Void, Drawable> { /** The system calls this to perform work in a worker thread and * delivers it the parameters given to AsyncTask.execute() */ protected Drawable doInBackground(String... urls) { return loadImageFromNetwork(urls[0]); } /** The system calls this to perform work in the UI thread and delivers * the result from doInBackground() */ protected void onPostExecute(Drawable result) { mImageView.setImageDrawable(result); } } //to see if these is a network public boolean isNetworkAvailable(Activity activity) { Context context = activity.getApplicationContext(); // 获取手机所有连接管理对象(包括对wi-fi,net等连接的管理) ConnectivityManager connectivityManager = (ConnectivityManager) context.getSystemService(Context.CONNECTIVITY_SERVICE); if (connectivityManager == null) { return false; } else { // 获取NetworkInfo对象 NetworkInfo[] networkInfo = connectivityManager.getAllNetworkInfo(); if (networkInfo != null && networkInfo.length > 0) { for (int i = 0; i < networkInfo.length; i++) { System.out.println(i + "===状态===" + networkInfo[i].getState()); System.out.println(i + "===类型===" + networkInfo[i].getTypeName()); mTextView.setText("===网络状态===>" + networkInfo[i].getState()+"\\n"+ "===网络类型===>" + networkInfo[i].getTypeName()); //Toast.makeText(MainActivity.this, "===状态===" + networkInfo[i].getState()+networkInfo[i].getTypeName(), 3000).show(); // 判断当前网络状态是否为连接状态 if (networkInfo[i].getState() == NetworkInfo.State.CONNECTED) { // mTextView.setText("===网络状态===>" + networkInfo[i].getState()+"\\n"+ // "===网络类型===>" + networkInfo[i].getTypeName()); return true; } // mTextView.setText("===状态===>" + networkInfo[i].getState()+"\\n"+ // "===类型===>" + networkInfo[i].getTypeName()); } } } return false; } }
权限:
manifest
<?xml version="1.0" encoding="utf-8"?> <manifest xmlns:android="http://schemas.android.com/apk/res/android" package="app.android.demo" android:versionCode="1" android:versionName="1.0" > <uses-sdk android:minSdkVersion="8" android:targetSdkVersion="18" /> <uses-permission android:name="android.permission.INTERNET"/> <uses-permission android:name="android.permission.ACCESS_NETWORK_STATE"></uses-permission> <application android:allowBackup="true" android:icon="@drawable/ic_launcher" android:label="@string/app_name" android:theme="@style/AppTheme" > <activity android:name="app.android.demo.MainActivity" android:label="@string/app_name" > <intent-filter> <action android:name="android.intent.action.MAIN" /> <category android:name="android.intent.category.LAUNCHER" /> </intent-filter> </activity> </application> </manifest>
效果 :
以上是关于androi 多线程的主要内容,如果未能解决你的问题,请参考以下文章