展会信息港展会大全

android开发一个使用AsyncTask实现异步刷新的功能
来源:互联网   发布日期:2016-01-14 12:39:04   浏览:1295次  

导读:一个使用AsyncTask实现简单异步刷新的功能。 实现该功能的过程,前提是您能在eclipse下建立简单android项目。如果您未做过任何的android开发就可能看起来比较吃力了。下面我将开 发的代码分块粘贴出来,以供大 ...

一个使用AsyncTask实现简单异步刷新的功能。

实现该功能的过程,前提是您能在eclipse下建立简单android项目。如果您未做过任何的android开发就可能看起来比较吃力了。下面我将开 发的代码分块粘贴出来,以供大家参考:

1.整个项目的架构

这个应该很清楚了,就不多说什么了。

2.MainActivity.java 的内容

package com.android_test;

import android.app.Activity;

import android.os.AsyncTask;

import android.os.Bundle;

import android.util.Log;

import android.view.View;

import android.view.View.OnClickListener;

import android.widget.Button;

//import android.widget.ProgressBar;

import android.widget.TextView;

import android.widget.Toast;

/**

* 一个使用AsyncTask实现简单异步刷新的功能。

*功能介绍:用一个按钮触发事件,用TextView来显示textview值的变化

* @author acebing

*

*/

public class MainActivity extends Activity {

private TextView mTextView; // 用来显示变化的值

private Button mButton; // 事件触发按钮

// private ProgressBar mProgressBar;

private GetCSDNLogoTask task;

@Override

public void onCreate(Bundle savedInstanceState) {

super.onCreate(savedInstanceState);

setContentView(R.layout.activity_main);

mTextView = (TextView) findViewById(R.id.textview);

mButton = (Button) findViewById(R.id.button);

mButton.setText("开始");

// mProgressBar = (ProgressBar) findViewById(R.id.progressBar);

mButton.setOnClickListener(new OnClickListener() {

public void onClick(View v) {

task = new GetCSDNLogoTask();

// 触发异步事件,并初始化参数为0

task.execute(0);

}

});

}

/**

* 此方法是在按回退键的时候停止后台任务

*/

@Override

protected void onDestroy() {

// TODO Auto-generated method stub

super.onDestroy();

task.cancel(true);

}

/**

* 继承AsyncTask 三种泛型类型 Params,Progress和Result。

* Params :启动任务是的输入参数

* Progress:任务运行的进度值

* Result: 任务运行结束要返回的参数

*

*

* 运行改程序可以通过LOG日志查看该类中三个方法被调用的次数和顺序

*/

class GetCSDNLogoTask extends AsyncTask<Integer, Integer, Integer> {

/**

*该方法 处理后台执行的任务,在后台线程执行。

*该方法处理一些耗时的操作,在该方法中不能进行UI组建的更新

*/

@Override

protected Integer doInBackground(Integer... params) {

Log.d("syso", "doInBackground");

publishProgress(0); // 将会调用onProgressUpdate(Integer... progress)方法

do {

try {

Thread.sleep(1000);

} catch (InterruptedException e) {

e.printStackTrace();

}

// 判断如果task已经cancel就没有必须继续进行下面的操作

params[0] += 10;

publishProgress(params[0]);

} while (params[0] < 100);

return params[0];

}

/**

* 在调用publishProgress之后被调用,在ui线程执行.

* publishProgress 触发一次,则该方法被调用一次。

* 在此方法中可以进行UI组件的更新。

* 例如给textview组件设置值等

*/

protected void onProgressUpdate(Integer... progress) {

Log.d("syso", "onProgressUpdate");

// mProgressBar.setProgress(progress[0]);// 更新进度条的进度

mTextView.setText(progress[0].toString());

Log.d("syso", progress[0].toString());

}

/**

* 该方法是后台任务执行完之后被调用,在ui线程执行

* 可以进行UI组件更新,

* 并且该组件只返回最后一次结果,一次任务也只调用一次

*/

protected void onPostExecute(Integer result) {

Log.d("syso", "onPostExecute");

if (result != null) {

Toast.makeText(MainActivity.this, "成功", Toast.LENGTH_LONG)

.show();

} else {

Toast.makeText(MainActivity.this, "失败", Toast.LENGTH_LONG)

.show();

}

}

/**

*如果activity实现了 onDestroy方法,在按回退键后此方法执行,并任务停止。

*如果没有实现onDestroy方法,在按回退键后此方法不执行并且后台任务继续直到任务自动结束。

*/

@Override

protected void onCancelled() {

// TODO Auto-generated method stub

super.onCancelled();

Log.d("syso", "task 取消");

}

}

}

3 .activity_main.xml配置

下面配置中<!--<ProgressBar-->

<!--android:id="@+id/progressBar" -->

<!--android:layout_width="wrap_content" -->

<!--android:layout_height="wrap_content" -->

<!--android:visibility="gone" -->

<!--/> -->

上边这一段配置是注释掉的,不起作用的,可以删除

<?xml version="1.0" encoding="utf-8" ?>

<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"

xmlns:tools="http://schemas.android.com/tools"

android:orientation="vertical"

android:layout_width="match_parent"

android:layout_height="match_parent" >

<TextView

android:id="@+id/textview"

android:layout_width="wrap_content"

android:layout_height="wrap_content"/>

<Button

android:id="@+id/button"

android:layout_width="wrap_content"

android:layout_height="wrap_content"/>

<!--<ProgressBar-->

<!--android:id="@+id/progressBar" -->

<!--android:layout_width="wrap_content" -->

<!--android:layout_height="wrap_content" -->

<!--android:visibility="gone" -->

<!--/> -->

</LinearLayout>

4.AndroidManifest.xml 配置

<manifest xmlns:android="http://schemas.android.com/apk/res/android"

package="com.android_test"

android:versionCode="1"

android:versionName="1.0" >

<uses-sdk

android:minSdkVersion="14"

android:targetSdkVersion="15" />

<!-- 下面这一行是上网权限的配置,在这个程序中可以省去 -->

<uses-permission android:name="android.permission.INTERNET" />

<application

android:icon="@drawable/ic_launcher"

android:label="@string/app_name"

android:theme="@style/AppTheme" >

<activity

android:name=".MainActivity"

android:label="@string/title_activity_main" >

<intent-filter>

<action android:name="android.intent.action.MAIN" />

<category android:name="android.intent.category.LAUNCHER" />

</intent-filter>

</activity>

</application>

</manifest>

5 。效果(界面有点搓,大家见谅)

部署好项目后启动,看到启动后的效果是一个开始按钮,点击开始按钮可以显示一个textview上值从0,步长为10每隔1秒的递增,直到100,然后弹 出成功的提示。

6.源码地址:http://www.oschina.net/code/snippet_867782_15488

所有配置及代码都已贴完,以上小项目是使用android4.0.3平台编译的。当然也完全可以在其他的平台上编译

赞助本站

人工智能实验室

相关热词: AsyncTask 异步刷新 android

AiLab云推荐
展开

热门栏目HotCates

Copyright © 2010-2024 AiLab Team. 人工智能实验室 版权所有    关于我们 | 联系我们 | 广告服务 | 公司动态 | 免责声明 | 隐私条款 | 工作机会 | 展会港