线程和fragment
来源:互联网 发布:c语言中int 编辑:程序博客网 时间:2024/06/06 06:41
线程类thread和接口Runnable()
接口Runnable()接口只有一个run()方法;
Thread类讲run()方法实现为空方法
创建线程的方法:
1.继承Tread类
因为Tread类中的run()方法是空方法,所以继承类中的方法要去实现run()方法;
***在程序中,线程语句的顺序只决定了线程语句产生的顺序,线程产生后并不立即运行,而是和系统中的所有其它线程一起等待系统来执行它,这时所有线程执行的机会是均等的,所有这些线程的执行顺序由系统调度和控制,不由程序决定。
2.实现Runnable()接口
Runnable1类只是实现Runnable的接口的一个类,它并不是Thread的子类。Runnable类的对象r1虽然带有run()方法的线程体,但其中没有start()方法,所以r1不是线程对象。由于Thread类的run()方法是空方法,所以在main()方法中,必须以Runnable1类的对象r1和r2作为目标对象,构造Thread类的线程t1和t2,之后通过t1.start()启动线程。
两种创建线程方法的比较
(1)直接继承线程Thread类
该方法编写简单,可以直接操作线程,适用于单重继承情况,因而不能再继承其他类
(2)实现Runnable接口
当一个线程已继承了另一个类时,就只能用实现Runnable接口的方法来创建线程,且便于保持程序风格的一致性。
例子:
<span style="font-family:SimSun;">class MyThread extends Thread{</span>
<span style="font-family:SimSun;">public void run(){</span>
<span style="font-family:SimSun;">System.out.pritln("123123");</span>
<span style="font-family:SimSun;">}</span>
<span style="font-family:SimSun;">}</span>
<span style="font-family:SimSun;">new MyThread(){}.start();</span>
<span style="font-family:SimSun;">class MyRunnable implemts Runnable()</span>
<span style="font-family:SimSun;">{</span>
<span style="font-family:SimSun;">public void run()</span>
<span style="font-family:SimSun;">{</span>
<pre name="code" class="java" style="font-size: 18px;"><span style="font-family:SimSun;">System.out.pritln("123123");</span>
<span style="font-family:SimSun;">}</span>
<span style="font-family:SimSun;">}</span>
<span style="font-family:SimSun;">MyRunnable myRunnable=new MyRunnable();</span>
<span style="font-family:SimSun;">Thread my=new MyThread(myRunable);</span>my.start();
重点
还有一个方法是实现更新主线程的UI的
格式:Activity.this.RunOnUiThread(new Runnable(){
public void run()
{}
});
二.app包中的fragment和v4包中的fragment的使用的区别
1、尽量不要用app包中的fragment,因为这个是在3.0之后才有的,支持的版本太高,在低版本中是是用不了的
2、android.support.v4.app.Fragment:可以兼容到1.6的版本,
3、关于这两个fragment使用<fragment>标签的问题
(1)app.fragment和v4.fragment都是可以使用<fragment>标签的
只是在在使用的时候如果是app.fragment则没有什么特殊的地方继承Activity即可。
(2)当v4.fragment使用<fragment>标签的时候就要特别注意了:
当这个Activity的布局中有<fragment>标签的时候,这个Activity必须继承
FragmentActivity,否则就会报错
08-27 08:25:04.946: E/AndroidRuntime(9839): Caused by: java.lang.ClassCastException: com.example.android_fragment_bottom.fragments.TopBarFragment cannot be cast to android.app.Fragment
此时如果不卜继成FragmentActivity的话 编译系统会把<fragment>认为是app包中的Fragment来处理。但是此时我们导入的是v4包中的Fragment
Android官方文档中的Fragment的例子就是以app包中的Fragment来讲解的。
(3)app包中关于Fragment的类和方法在V4包中都是有相应的对应的
可以看看这里getSupportFragmentManager().getFragments()方法在V4包中消失了?
三.fragment
public class TitleFragment extends Fragment {
@Override
public View onCreateView(LayoutInflater inflater, ViewGroup container,
Bundle savedInstanceState) {
View v = inflater.inflate(R.layout.title_fragment, container, false);
return v;
}
}
需要注意的是LayoutInflater.inflate()这个方法,很长一段时间,我都木有理解什么叫所谓的“扩充布局”,后来去stackoverflow网站上去找找,老外说:扩充布局这是java里面的一个惯用的说法。实际上就是将一个布局文件(xml)变成一个View对象,在下是这样理解的。Activity中有一个setContentView()的方法,应该也是将布局文件转成一个View对象,然后给Activity设置上
如上的代码就是要让onCreateView返回一个View对象啦,当然我们这个TitleFragment对象是要显示一个列表的,所以布局中应该有一个ListView的吧,看看布局文件title_fragment.xml
- 线程和fragment
- fragment和fragment传参
- Fragment嵌套Fragment和Viewpager
- Fragment嵌套Fragment和Viewpager
- TabActivity 、fragemnt+fragment 和 Fragment+Viewpager 优缺点
- android 静态fragment动态fragment和焦点
- Fragment和Fragment之间的数据传输
- 加载fragment和fragment的自动跳转
- Fragment 和 Fragment 之间的通讯
- Fragment和Activity交互,Fragment回调
- Fragment 和 Fragment 之间的通讯
- fragment 和viewpaper结合fragment生命周期减少
- Fragment和Activity
- activity和fragment生命周期
- Fragment和Sqlite问题
- ActionBar和fragment
- Fragment和Activity
- Fragment和Activity生命周期
- iOS 系统 键盘的通知
- 漫画设计模式2——老板招工模式(代理模式)
- MySQL修改root密码的4种方法(以windows为例)
- PowerDesigner的应用(二)
- eclipse内存分析工具MAT浅谈(一)
- 线程和fragment
- 我的学习之旅(2) boot.s
- 奇怪的bug,win8里的ctrl-backspace失效了
- iOS开发Xcode6之后创建空项目
- 沙盒路径下Plist文件操作
- 权重标签
- 自省--“勿在浮沙筑高台”
- 鸟哥私房菜(基础篇第三版)笔记
- 集成化环境包WampServer如何定义网站根目录