代码之家  ›  专栏  ›  技术社区  ›  Shouvik

是否可以检测到无限循环?

  •  2
  • Shouvik  · 技术社区  · 14 年前

    我编写了一个线程应用程序,它运行一个无限循环。问题是,因为它被定义为一个线程,所以循环并没有被持有和处理人质,而是消耗了我大量的处理能力,从而缩短了我的电池寿命。现在我知道这不是编写程序的正常方式,而是考虑到胭脂红应用程序可能被构建,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();
    }
    
    }
    

    编辑:好吧,我们知道安卓不会停止这个程序!那么,我们如何编写一个程序来检测程序中的缺陷并关闭它们呢? 另外,我想知道,在前一个函数还在运行时,单击按钮是否应该启动相同函数的新线程?他们不应该排队吗?

    3 回复  |  直到 14 年前
        1
  •  1
  •   Janusz Daniel Rindt    14 年前

    阅读 Multitasking the Android 关于Android如何处理线程的更多信息,请访问Way博客帖子。最终,如果内存不足,操作系统认为你的线程对用户来说并不重要,那么安卓会终止线程。如果您将此作为一个服务来实现,那么您可以使用一个自动重新启动功能来构建它,该功能使操作系统在内存再次可用时重新创建服务。

    因为系统无法决定程序是否工作良好。也许这个应用程序在用户同意的情况下计算了大量的数据,持续了几个小时,或者只是疯了。系统无法决定这一点。

    用户唯一能防止这种情况的方法是检查运行过程和电池消耗,如果手机速度变慢,可能会删除程序,这些程序的构建和使用都很糟糕,如果一些用户在技术上有足够的资格,我希望他们在市场上对应用程序进行评级和评论,并警告其他不懂技术的人。

        2
  •  0
  •   Christian    14 年前

    打个电话怎么样 wait(100) 在循环结束时让它不时暂停?

        3
  •  0
  •   fazo    14 年前

    它将在每台设备或电脑上吸引电池寿命。

    你只有无限的循环,正在执行计算,而不是等待任何事件/动作。

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

    这是你的计划,你要对它的工作负责

    如果它运行一个无休止的循环,它将消耗电池寿命。那样简单