android疑难杂症

android疑难杂症

ContentObserver是异步的 如果你在onChange里面做界面的更新操作 这时就会卡死


android防被杀

android防被杀

现在的清理软件如360都有一键清理的功能,他会后台运行的程序一个个kill掉。程序死掉后也不会走正常的生命周期,比如调用ondestory方法。怎么才能让程序一直运行在后台,不被360杀掉呢?

在测试了几种方法后,终于找到一种方法。android有个同步工具Sync Adapter,你注册了之后可以周期运行。这样,即使你的进程被他杀掉后,也会在一定时间内自动重启。 android develop网站有他的介绍 Run the Sync Adapter Periodically

大家可以下载官方的示例看下他是怎么声明注册的 其中addPeriodicSync方法就是添加周期运行的方法 java android.content.ContentResolver.addPeriodicSync(Account account, String authority, Bundle extras, long pollFrequency) pollFrequency就是周期的时间,是以秒为单位的。

不过在实际的测试过程当中,发现他周期不一定就是你写的时间,有时快有时慢,这是因为 * Although these sync are scheduled at the specified frequency, it may take longer for it to actually be started if other syncs are ahead of it in the sync operation queue. This means that the actual start time may drift.

你的同步器会受到别人的同步器的影响。


笔记

mahua ##MaHua是什么? 一个在线编辑markdown文档的编辑器

向Mac下优秀的markdown编辑器mou致敬

MaHua有哪些功能?

  • 2014-9-17 SmartCardService branch cm-11.0
    • 没有编译成功 不懂怎么运行
    • 涉及到工程目录格式
    • jni aidl
  • 2014-9-17 AndroidAsync
    • Future
  • 2014-9-17 grafika
    • 视频处理
  • 2014-9-22 libgdx
    • 配置完成
    • 下载Gradle插件时如果出问题记得选择Contact all update sites
  • 2014-9-23
    • LayerDrawable 多张图片重叠
    • 写自己的工具类 FileUtil
  • 2014-9-24
  • 强大的自定义CSS功能,方便定制自己的展示
  • 有数量也有质量的主题,编辑器和预览区域
  • 完美兼容Github的markdown语法
  • 预览区域代码高亮
  • 所有选项自动记忆

有问题反馈

在使用中有任何问题,欢迎反馈给我,可以用以下联系方式跟我交流

  • 邮件(dev.hubo#gmail.com, 把#换成@)
  • QQ: 287759234
  • weibo: @草依山
  • twitter: @ihubo

捐助开发者

在兴趣的驱动下,写一个免费的东西,有欣喜,也还有汗水,希望你喜欢我的作品,同时也能支持一下。 当然,有钱捧个钱场(右上角的爱心标志,支持支付宝和PayPal捐助),没钱捧个人场,谢谢各位。

感激

感谢以下的项目,排名不分先后

关于作者

javascript var ihubo = { nickName : "草依山", site : "http://jser.me" }


线程 wait,notify

线程 wait,notify

stackoverflow

有三个线程ID分别是A、B、C,请有多线编程实现,在屏幕上循环打印10次ABCABC


``` import java.util.concurrent.atomic.AtomicInteger;

public class Print extends Thread{ private AtomicInteger synObj; private int count; private String s; private int flag; private int total = 0;

public Print(int count,AtomicInteger atomicInteger,String s,int flag) {
	this.count = count;
	this.synObj = atomicInteger;
	this.s = s;
	this.flag = flag;
}
public void run() {
	while(true) {
		synchronized(synObj) {
			if(synObj.intValue()%3 == flag) {
				total++;
				synObj.set(synObj.intValue()+1);
				System.out.println(s);
				synObj.notifyAll();
				if(total == count) {
					break;
				}
			}else {
				try{
					synObj.wait();
				}catch(Exception e){
					e.printStackTrace();
				}
			}
		}
	}
}
public static void main(String[]args) throws Exception {
	AtomicInteger synObj = new AtomicInteger(0);
	Print a = new Print(10,synObj,"A",0);
	Print b = new Print(10,synObj,"B",1);
	Print c = new Print(10,synObj,"C",2);
	a.start();
	b.start();
	c.start();
} } ```

handler内存泄露

You’re creating a new Message each time. This is probably what’s leading to your issue. What you should be doing is getting a Message from the Handler’s Message pool using:

Message message = handler.obtainMessage(); This will keep you from allocating all that new memory.

public class MyGridFragment extends Fragment{

static class MyInnerHandler extends Handler{
    WeakReference<MyGridFragment> mFrag;

    MyInnerHandler(MyGridFragment aFragment) {
        mFrag = new WeakReference<MyGridFragment>(aFragment);
    }

    @Override
    public void handleMessage(Message message) {
        MyGridFragment theFrag = mFrag.get();
        switch (message.what) {
        case 2:
            ArrayList<HashMap<String,String>> theurls = (ArrayList<HashMap<String,String>>) message.obj;
            theFrag.urls.addAll(theurls);
            theFrag.theimageAdapter.notifyDataSetChanged();
            theFrag.dismissBusyDialog();
            break;
        }//end switch
    }
}
MyInnerHandler myHandler = new MyInnerHandler(this); }

AsyncHttpClient上面也用到了这个