A.线程
1.AsyncTask
用途:
耗费比较长的时间操作,比较常见的就是用户下载操作,
说明:
a.AsyncTask是泛型,携带三个参数
-
Params
, the type of the parameters sent to the task upon execution.执行任务时的参数类型 -
Progress
, the type of the progress units published during the background computation.在后台计算公布的进展,单位的类型 -
Result
, the type of the result of the background computation.该类型的背景下计算的返回结果
b.主要方法
onPreExecute()-----------执行任务后,立即UI线程上调用。这一步通常用于设置任务,例如,在用户界面上显示一个进度栏。
doInBackground(Params... params)------线程执行的主题方法。
onProgressUpdate(Integer... values) ------在UI线程上调用之后调用一个publishProgress(Progress.)。执行时间是不确定的。这种方法是用来显示用户界面中的任何形式的进步,而后台计算仍在执行。例如,它可以用来制作动画进度条或显示在文本字段中的日志。
onPostExecute-------在UI线程上调用后台执行结束后。这一步将作为一个参数被传递到背景执行的结果。
c.调用执行
excete()
excete(Params) 带参数的,这个参数可以在AsyncTask实现类中的doInBackground方法中的方法参数获得。
B。广播机制
public class MyBroadenReceiver extends BroadcastReceiver
{
public MyBroadenReceiver(){
System.out.println("instans MyBroadenReceiver");
};
@Override
public void onReceive(Context context, Intent intent)
{
System.out.println("onReceive");
}
}
AndroidManifest配置文件
<receiver android:name=".MyBroadenReceiver">
<intent-filter>
<action android:name="android.intent.action.EDIT"/>
</intent-filter>
</receiver>
配置文件里面的action是重点,下面的Activity会通过setAction,把广播消息发给这个MyBroadenReceiver
Intent intent = new Intent();
intent.setAction(Intent.ACTION_EDIT);
AndroidReceiverActivity.this.sendBroadcast(intent);
C.日志
方法 | 级别 |
Log.v | Verbose |
Log.d | Debug |
Log.i | Info |
Log.w | Warning |
Log.e | Error |
D.Service学习
说明
Service是一个应用程序组件,代表一个应用程序期望执行的服务,而不是与用户交互的长时间运行的操作或提供其他应用程序使用的功能。也就是说可以在后台单独运行。
像其他的应用程序对象,在其宿主进程的主线程运行。这意味着,如果你的服务会做任何CPU密集型(如MP3播放)或阻塞(如网络)的操作,它应该生成它自己的线程在做这项工作。它有自己的运行线程。
注意点:
一个Service不是一个单独的进程。它能提供服务并不是说他单独运行的。
一个Service不是一个线程。
特点:
1.单独运行在后台
2.应用程序把自己的功能暴露给其他其他应用程序。
生命周期
如果有人调用Context.startService() 后,系统将检索Service (创建和调用 onCreate() 方法),然后由客户端提供的参数调用其 onStartCommand()方法,最后调用onStart()方法。此时,服务会继续运行,直到你调用 Context.stopService() 或 stopSelf()后停止Service。请注意,对 Context.startService() 的多个调用不将嵌套 (尽管他们做导致多个相应的调用到 onStartCommand()),所以无论多少次启动服务最后停止只要调用Context.stopService() 或 stopSelf()一次 。service执行onDestroy()方法停止
类型
a.本地类型
b.远端类型
注意点:远端类型的Service需要在AndroidManifest.xml文件中配置android:process=":RemoteService"
两种类型的service代码例子下载地址
http://download.csdn.net/detail/fellting/4157785
service debug方式
*在代码需要debug的代码前面加下面的代码
android.os.Debug.waitForDebugger();
E.Handler
说明:处理线程的类。在自定义要执行的线程里设置Message信息 ,并添加到消息队列中;在handler管理该线程执行的时间点和一些环境信息,并处理队列中的message。处理自定义的可运行的线程。
用途
1. 可以指定调度信息和可以运行的线程在未来指定的时间点执行
2.指定一个动作在不同的线程中执行
根据handler里面的方法可以指定执行新子线程的不同方式。
场景:当你的应用程序创建一个线程时,主线程要负责管理最上层的应用程序比如UI渲染,activities,广播接收等。如果想处理其他事情,你可以在主线程中创建一个handler,启动一个新的子线程,并在子线程中通过sendMessage,添加到消息队列中,由handler自行处理。这种情况是在不影响主线程的情况下,自行开通一个新的子线程。
例子
Activity
public class AndroidHandlerActivity extends Activity implements OnClickListener{
private String tag = "AndroidHandlerActivity";
private VideoHandler video ;
private int on = 0;
@Override
public void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.main);
video = iniVideoHandler();
this.getOnVideo().setOnClickListener(this);
//暂停和播放视频事件
}
Runnable run = new Runnable()
{
@Override
public void run()
{
Message message = Message.obtain();
//on^= 1;
message.what ^= 1;
video.sendMessage(message);
Log.i(tag, "message what value:"+message.what);
}
};
//暂停和播放视频事件
@Override
public void onClick(View v)
{
//暂停和播放事件处理
video.post(run);
}
private VideoHandler iniVideoHandler(){
return new VideoHandler(this);
}
public Button getOnVideo()
{
return (Button)this.findViewById(R.id.onAndPause);
}
Handler类
public class VideoHandler extends Handler
{
private String tag = "VideoHandler";
private AndroidHandlerActivity activity ;
public VideoHandler(AndroidHandlerActivity activity){
this.activity = activity;
}
@Override
public void handleMessage(Message msg)
{
//如果是暂停,暂停视频,显示一个广告在视频上,如果播放,就把广告去掉,继续播放视频
//把暂停或者播放图标变换下
Log.i(tag, "handleMessage"+msg);
switch (msg.what)
{
case 0:
Log.i(tag, "继续播放");
Log.i(tag, "移除视频上的广告");
this.setOnVideoText("暂停");
break;
case 1:
Log.i(tag, "暂停播放");
Log.i(tag, "在视频上添加广告");
this.setOnVideoText("继续");
break;
//可以处理其他情况,比如退出
default:
Log.i(tag, "其他情况");
break;
}
}
private void setOnVideoText(String text)
{
this.activity.getOnVideo().setText(text);
}
}
太阳系 - http://blog.csdn.net/fellting