我写了一个运行无限循环的线程应用程序。问题是,由于它被定义为一个线程,所以循环并没有劫持进程,而是占用了我的大量处理能力,从而减少了我的电池寿命。现在我知道这不是一个正常的程序,但考虑到胭脂应用程序可能被构建的事实,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没有停止这个程序!那么,我们如何编写一个程序来检测程序中的这些缺陷并关闭它们呢?我还想知道,点击按钮应该启动相同功能的新线程,而以前的线程仍在运行?难道他们不应该排队吗?
3条答案
按热度按时间zphenhs41#
阅读Multitasking the Android way博客文章,了解有关Android如何处理线程的更多信息。最终,如果内存变低,操作系统决定你的线程对用户并不重要,android将杀死线程。如果您将其实现为一个服务,那么您可以使用自动重启功能来构建它,该功能使操作系统在再次有可用内存时重新创建服务。
因为系统无法判断一个程序是否工作正常。也许这个应用程序在用户同意的情况下计算了几个小时的大量数字,或者只是疯了。系统无法决定这一点。
用户可以防止这种情况的唯一方法是检查运行过程和电池消耗,如果手机变慢,可能会删除构建和使用大量资源的程序,如果一些用户在技术上足够合格,我希望他们在市场上对应用程序进行评级和评论,并警告其他不懂技术的人。
bvuwiixz2#
在循环结束时简单地调用
wait(100)
来让它不时地暂停,怎么样?scyqe7ek3#
它将消耗每台设备或电脑的电池寿命。
你只是有一个无限循环,正在执行计算,而不是等待任何事件/动作。
系统通常会让这个程序无休止地运行。
这是你的程序,你要对它的工作方式负责。
如果它运行一个无休止的循环,它将提请电池寿命...就这么简单。