工作内容:
1.FrameLayout/OnTouchListener(滑动监听)
2.生命周期
3.UI线程
4.Android中的耗时操作/多线程
5.多线程中的交互:Handler handler.post(Runnable runnable)
6.多线程中的交互:runOnUiThread(Runnable runnable)
一、FrameLayout贞布局:里面放置的内容,可以一层一层的显示,先放后显示(在该布局对象上添加事件监听,当触发事件时,可以一层一层的设置其可见性【其他布局不可以】)
二、生命周期:onCreate → onStart/onRestart → onResume → 运行状态(显示在最前面) →onPause→onStop →onDestroy
在生命周期中,程序按上列顺序进入 运行状态,当活动失去焦点,则进入onPause,当活动长时间失去焦点,则进入onStop,可能会被系统回收资源,销毁活动。
三、Ui线程:主要工作是对界面(UI)进行更新和维护,线程不能进行耗时的操作,如果进行了超过5秒的操作可能引起提示框:提示是否继续等待
四、多线程中的交互:Handler
Handler :可以发送Message,和接收Message【通过message.what = 0来设置message的类型】
Message:可以放置Bundle【用于传送基本数据类型,String和实现了Serizlizable接口的应用类型】
实例1:【可以看到我将子线程中的数据通过handler发送到了handMessage方法中——这样就完成了一个子线程与主线程之间的通信】
import android.app.Activity; import android.content.Intent; import android.os.Handler; import android.os.Message; import android.os.Bundle; import android.view.View; import android.widget.Button; import java.util.ArrayList; //在onCreate()方法中添加一条线程(子线程传递一个list到UI线程) public class MainActivity extends Activity { private Button btn_join; private ArrayList<String> userList; Message message =new Message(); Message message1 =new Message(); private int temp = 0; Bundle bundle1 =new Bundle(); Handler handler =new Handler(){ //接收handler发过来的消息 @Override public void handleMessage(Message msg) { message1 = msg; switch (msg.what) { case 1://接收message.what==1的消息 btn_join.setText(temp+""); break; default: break; } }; }; @Override protected void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState); setContentView(R.layout.activity_main); btn_join = (Button)findViewById(R.id.button1); btn_join.setOnClickListener(new View.OnClickListener() { /** * 1.将实现Serializable的类User添加到ArrayList<User>的对象userList中 * 2.intent.putExtra("Users",userList);传递 */ @Override public void onClick(View arg0) { Intent intent = new Intent(MainActivity.this,Secound.class); Bundle bundle = new Bundle(); intent.putExtra("Users",userList); startActivity(intent); } }); new Thread(new Runnable() { @Override public void run() { for(int i = 1;i<=10;i++){ try { Thread.sleep(1000); } catch (InterruptedException e) { e.printStackTrace(); } bundle1.putSerializable("user",userList); message.setData(bundle1);//发送bundle message.setTarget(handler); message.what = 1; handler.sendMessage(message); temp++; } } }).start(); } }实例2:使用Handler.post(Runnable runnable)
final Handler handler1 = new Handler(); new Thread(){//开启子线程 @Override public void run() { //子线程中执行 handler1.post(new Runnable() { @Override public void run() { //执行Ui线程 } }); } }.start();实例3:使用runUiThread(Runnable runnable)
new Thread(){ @Override public void run() { //子线程中执行 runOnUiThread(new Runnable() { @Override public void run() { //Ui线程中执行 } }); } }.start();