android 线程只启动一次
将static线程放到Application
一般放到最后面,不然application的准备工作还没好,应用就崩溃了。
application个启动的静态方法
baseActivity会有调用onDestory
在java中同一个线程只能被start()一次,当第二次start()就会报异常
需求:需要同一个线程多次执行同一个方法。为此可以使用notify(),wait()方法来达到我们想要的效果。先看代码
public class ThreadTest extends Thread { private static boolean flag = false; public ThreadTest() { System.out.println("threadID is :"+Thread.currentThread().getId()); start(); } /** * @param args */ public static void main(String[] args) { System.out.println("main threadID is :"+Thread.currentThread().getId()); ThreadTest test = new ThreadTest(); try { sleep(1000); } catch (InterruptedException e) { // TODO Auto-generated catch block e.printStackTrace(); } synchronized (test) { test.notify(); } try { sleep(1000); } catch (InterruptedException e) { // TODO Auto-generated catch block e.printStackTrace(); } synchronized (test) { test.notify(); flag = true; } } public void threadStart() { if (!isAlive()) { start(); } } @Override public void run() { while(true){ try { System.out.println("threadID is :"+Thread.currentThread().getId()); synchronized (this) { wait(); } if (flag) { break; } } catch (InterruptedException e) { e.printStackTrace(); } } } }
Android (安卓) getContext 和 getActivity的区别
getActivity()获得Fragment依附的Activity对象,返回活动此片段是当前关联 ,
getView()返回该 片段的根视图布局(由onCreateView(LayoutInflater, ViewGroup,Bundle)返回的布局)
- MainActivity.this:表示MainActivity对象,一般用在内部类中指示外面的this,如果在内部类直接用this,指示的是内部类本身。因为MainActivity继承Activity,而Activity继承Context,所以它也可以用来提供Activity Contex;
- this:表示当前对象;一般而言,在哪个类中调用,就是指向该对象。
- getContext():这个是View类中提供的方法,在继承了View的类中才可以调用,返回的是当前View运行在哪个Activity Context中。
- getActivity():获得Fragment依附的Activity对象。Fragment里边的getActivity()不推荐使用原因如下:这个方法会返回当前Fragment所附加的Activity,当Fragment生命周期结束并销毁时,getActivity()返回的是null,所以在使用时要注意判断null或者捕获空指针异常。
在Fragment中获取上下文Context一般用getActivity: 复制代码
在Fragment中使用findViewById方法
Button button = getView().findViewById(R.id.btn);
int类型的图片转换成drawable和Bitmap
Drawable drawable = context.getResources