线程和fragment

线程类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

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值