问题描述
我写了一个运行无限循环的线程应用程序。 问题在于,由于其定义为线程,因此该循环没有保留和处理人质,但确实消耗了我大量的处理能力,从而缩短了电池寿命。 现在,我知道这不是通常编写程序的方式,而是考虑到可能会生成大量应用程序的事实,android采取了何种预防措施来停止实现无限循环的进程。 同时,是否可以访问特定的类以访问应用程序的内存使用情况以及处理器使用情况?
编码...
package com.shouvik.HandlerThread;
import android.app.Activity;
import android.app.ProgressDialog;
import android.os.Bundle;
import android.os.Handler;
import android.os.Message;
import android.util.Log;
import android.view.View;
import android.view.View.OnClickListener;
import android.widget.Button;
public class HandlerThread extends Activity{
private ProgressDialog progressDialog;
/** Called when the activity is first created. */
@Override
public void onCreate(Bundle savedInstanceState)
{
super.onCreate(savedInstanceState);
setContentView(R.layout.main);
((Button) findViewById(R.id.Button01)).setOnClickListener(new OnClickListener()
{
public void onClick(View view)
{
DoSomething();
}
});
}
private Handler messageHandler = new Handler() {
public void handleMessage(Message msg)
{
super.handleMessage(msg);
Log.v("Handler", "Message Received. Dismissing Dialog");
}
};
protected void DoSomething()
{
new Thread()
{
public void run()
{
Log.v("Sleep", "Starting Count");
for(int i= 1; i!=0; i++)
{
Log.v("Count"," i = "+i);
}
messageHandler.sendEmptyMessage(0);
}
}.start();
}
}
编辑:好的,我们知道android并没有停止该程序! 那么,我们如何编写程序来检测程序中的此类缺陷并将其关闭? 我也想知道,是否应该单击该按钮以在以前的线程仍在运行时启动相同功能的新线程? 他们不应该排队吗?
1楼
阅读有关方式的博客文章,以获取有关Android如何处理线程的更多信息。 最终,如果内存不足并且操作系统决定您的线程对用户而言并不重要,则android将终止该线程。 如果您将其实现为服务,则可以使用自动重启功能进行构建,如果再次有可用的内存,则操作系统可以重新创建该服务。
由于系统无法确定程序是否运行良好。 可能是应用在征得用户同意的情况下计算了好几个小时甚至只是疯狂。 系统无法决定这一点。
用户可以防止这种情况发生的唯一方法是,如果手机变慢,请检查运行过程和电池消耗,如果某些用户在技术上足够合格,则可以删除那些不良构建和使用大量资源的程序。对市场上的应用发表评论,并警告其他不是那些精通技术的人。
2楼
在循环末尾简单地调用wait(100)
使其不时暂停怎么样?
3楼
它会消耗每台设备或计算机上的电池寿命
您只是无休止的循环,正在执行计算,而不等待任何事件/动作
系统通常只会让该程序无休止地运行
这是您的程序,您要对其工作方式负责
如果它运行一个无休止的循环,将会消耗电池寿命。