能否检测到无限循环?

3

我写了一个线程应用程序,它运行一个无限循环。问题是,由于它被定义为一个线程,循环并没有将进程托管,但却消耗了大量的处理能力,从而降低了我的电池寿命。现在我知道这不是通常编写程序的方式,但考虑到可能会构建出恶意应用程序,安卓系统采取了什么预防措施来停止实现无限循环的进程?顺便问一下,我可以访问哪个特定类来获取应用程序的内存使用情况和处理器使用情况?

代码...

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();
}

}

编辑:好的,我们知道安卓对这个程序没有任何限制!那么我们如何编写一个程序来检测这些程序中的缺陷并关闭它们呢? 另外我想知道,点击按钮是否应该在之前的线程仍在运行时启动相同函数的新线程?它们不应该排队吗?


你怎么知道运行一个无限循环是一个缺陷?这可能是它预期的运行方式。解决这个问题的方法是使用应用程序监视电池使用情况,如果你拥有的应用程序使用了太多的电池而没有提供足够的实用性来抵消它,那么就将其删除。 - Falmarri
假设我们知道哪个应用程序正在耗尽电池!关键是如果我们能检测到循环,那么系统就可以强制关闭该程序。此外,没有任何有效的程序会在后台运行无限循环!它们应该在应用程序退出时立即关闭...(至少我不知道有哪个程序应该在后台运行它) - Shouvik
3个回答

1

阅读Android多任务博客文章,了解有关Android如何处理线程的更多信息。如果内存不足,并且操作系统认为您的线程对用户来说并不重要,Android将终止该线程。但是,如果您将其实现为服务,则可以使用自动重启功能构建它,如果再次有可用内存,则使操作系统重新创建服务。

由于系统无法确定程序是否执行良好工作。也许应用程序正在经过用户同意计算非常繁重的数字,或者已经失控。系统无法判断这一点。

用户唯一可以保护自己免受此影响的方法是检查运行的进程和电池消耗情况,如果手机变慢,可能会删除构建不良且使用太多资源的程序,如果某些用户具备足够的技术能力,我希望他们在市场上评价和评论应用程序,并警告其他不那么精通技术的人。


我认为除了这个答案,我不可能得到更好的答案,尽管我希望Android能够认真告知那些无知的用户有关有害应用程序的信息!感谢您的努力和+1 =) - Shouvik
Android确实有办法告知用户此事;这就是为什么2.0版本包括“电池使用”应用程序,直接集成在系统核心中。通常可以通过“设置”>“关于”>“电池”>“电池使用情况”进行访问。 - Christopher Orr

0

在循环结束时简单地调用wait(100),让它不时暂停一下,这个怎么样?


1
我喜欢它,但它没有任何作用。作为一个反面例子,它会对资源造成最大的消耗... - Shouvik

0

它会消耗每个设备或计算机的电池寿命。

你只是有一个无限循环,并进行计算而不等待任何事件/操作。

系统通常只会让这个程序无休止地运行。

这是你的程序,你要对它的工作负责。

如果它运行一个无限循环,它会消耗电池寿命...就这么简单。


1
没错,只要程序员有道德责任心就没问题,但如果他没有呢!那么,在这种情况下,我能通过程序检测和处理这样的问题吗? - Shouvik
如果程序员在道德上不负责任,那么无限循环难道不是你最担心的事情吗? - Ken
我相信安卓可以帮助我们解决其他问题...沙盒技术是有效的,我们下载具有某些权限的程序时,如果我们不想让它拥有这些权限,我们可以通过拒绝安装来实现,但是如果出现程序看似无害的情况,如果我们无法检测到此类错误,我们就会遇到严重问题。此外,正如某些研究所显示的那样,安装放屁应用程序的人几乎会安装任何东西。因此,在这种情况下,即使用户在技术上有资格,他也处于劣势(包括我自己:P)。 - Shouvik
1
用户可以查看哪些应用程序消耗了他的电池,并将那些不合理的应用程序关闭。 - Christian

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接