android 是否有可能检测到一个无限循环?

v09wglhw  于 2023-05-12  发布在  Android
关注(0)|答案(3)|浏览(228)

我写了一个运行无限循环的线程应用程序。问题是,由于它被定义为一个线程,所以循环并没有劫持进程,而是占用了我的大量处理能力,从而减少了我的电池寿命。现在我知道这不是一个正常的程序,但考虑到胭脂应用程序可能被构建的事实,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没有停止这个程序!那么,我们如何编写一个程序来检测程序中的这些缺陷并关闭它们呢?我还想知道,点击按钮应该启动相同功能的新线程,而以前的线程仍在运行?难道他们不应该排队吗?

zphenhs4

zphenhs41#

阅读Multitasking the Android way博客文章,了解有关Android如何处理线程的更多信息。最终,如果内存变低,操作系统决定你的线程对用户并不重要,android将杀死线程。如果您将其实现为一个服务,那么您可以使用自动重启功能来构建它,该功能使操作系统在再次有可用内存时重新创建服务。
因为系统无法判断一个程序是否工作正常。也许这个应用程序在用户同意的情况下计算了几个小时的大量数字,或者只是疯了。系统无法决定这一点。
用户可以防止这种情况的唯一方法是检查运行过程和电池消耗,如果手机变慢,可能会删除构建和使用大量资源的程序,如果一些用户在技术上足够合格,我希望他们在市场上对应用程序进行评级和评论,并警告其他不懂技术的人。

bvuwiixz

bvuwiixz2#

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

scyqe7ek

scyqe7ek3#

它将消耗每台设备或电脑的电池寿命。
你只是有一个无限循环,正在执行计算,而不是等待任何事件/动作。
系统通常会让这个程序无休止地运行。
这是你的程序,你要对它的工作方式负责。
如果它运行一个无休止的循环,它将提请电池寿命...就这么简单。

相关问题