public class main extends Activity
{
private static final byte MENU_EXIT = 0, MENU_ABOUT = 1;
private static boolean FlashlightState;
private static long BackPressed;
private static ImageView Lamp;
private Flashlight FLASHLIGHT = null;
@Override
public void onCreate(Bundle savedInstanceState)
{
super.onCreate(savedInstanceState);
super.setContentView(R.layout.main);
super.getWindow().addFlags(WindowManager.LayoutParams.FLAG_FULLSCREEN);
FlashlightState = false;
Lamp = (ImageView) findViewById(R.id.imgVw_Lamp);
FLASHLIGHT = new Flashlight(this.getApplicationContext());
if (Flashlight.hasFlashlight) FLASHLIGHT.Open();
Lamp.setOnClickListener(new OnClickListener()
{
@Override
public void onClick(View arg0)
{
Lamp.setEnabled(false);
if (getSystemService(VIBRATOR_SERVICE) != null)
{
AudioManager VibratorState = (AudioManager) getApplicationContext().getSystemService(Context.AUDIO_SERVICE);
if (VibratorState.getRingerMode() != AudioManager.RINGER_MODE_SILENT)
{
Vibrator Switch = (Vibrator) getSystemService(Context.VIBRATOR_SERVICE);
Switch.vibrate(50);
}
VibratorState = null;
}
if (!FlashlightState) turnOnFlashlight();
else turnOffFlashlight();
Lamp.setEnabled(true);
return;
}
});
return;
}
@Override
protected void onStart()
{
super.onStart();
BackPressed = 0;
if (Flashlight.hasFlashlight) FLASHLIGHT.Open();
return;
}
@Override
protected void onPause()
{
super.onPause();
this.turnOffFlashlight();
BackPressed = 0;
if (Flashlight.hasFlashlight) FLASHLIGHT.Close();
return;
}
@Override
public void onBackPressed()
{
if ((BackPressed + 2000) > System.currentTimeMillis())
{
finish();
this.onDestroy();
}
else
{
Toast.makeText(getApplicationContext(), getString(R.string.Exit_Message), Toast.LENGTH_SHORT).show();
BackPressed = System.currentTimeMillis();
}
return;
}
@Override
public boolean onCreateOptionsMenu(Menu menu)
{
menu.add(Menu.NONE, MENU_EXIT, Menu.NONE, getString(R.string.Exit)).setIcon(android.R.drawable.ic_menu_close_clear_cancel);
menu.add(Menu.NONE, MENU_ABOUT, Menu.NONE, getString(R.string.About)).setIcon(android.R.drawable.ic_menu_info_details);
return super.onCreateOptionsMenu(menu);
}
@Override
public boolean onOptionsItemSelected(MenuItem item)
{
switch (item.getItemId())
{
case MENU_EXIT:
finish();
this.onDestroy();
break;
case MENU_ABOUT:
this.showAboutBox();
break;
}
return super.onOptionsItemSelected(item);
}
private final void showAboutBox()
{
AlertDialog.Builder AboutBox = new AlertDialog.Builder(this);
AboutBox.setTitle(getString(R.string.About));
AboutBox.setIcon(android.R.drawable.ic_dialog_info);
AboutBox.setMessage("Name:\nVisionlight\n\nDescription:\nFlashlight application for Android based devices.\n\nVersion:\n1.0.0\n\nLanguages:\nEnglish/International, Persian, Arabic\n\nPlatform:\nAndroid +2.2.x(Froyo)\n\nPermissions:\nCamera, Flashlight, Vibrate, Wake Lock.\n\nUses-feature:\nCamera [NR], Flashlight [NR].\n\nProducer/Developer:\nYousha Aleayoub(Y.P.Y)\n\nLicense:\nBSD\n\nContact:\nYousha.A@Hotmail.com\n\nLink:\nhttp://yousha.blog.ir/");
AboutBox.setNeutralButton(getString(R.string.Ok), new DialogInterface.OnClickListener()
{
@Override
public void onClick(DialogInterface dialog, int which)
{
dialog.dismiss();
}
});
AboutBox.create().show();
return;
}
@Override
protected void onDestroy()
{
super.onDestroy();
this.turnOffFlashlight();
if (Flashlight.hasFlashlight) FLASHLIGHT.Close();
FLASHLIGHT = null;
android.os.Process.killProcess(android.os.Process.myPid());
return;
}
private final void turnOnFlashlight()
{
FlashlightState = true;
Lamp.setImageResource(R.drawable.lamp_on);
if (Flashlight.hasFlashlight)
{
FLASHLIGHT.On();
}
else
{
WindowManager.LayoutParams Layout = getWindow().getAttributes();
Layout.screenBrightness = 1F;
getWindow().setAttributes(Layout);
findViewById(R.id.lnrLyt_Main).setBackgroundColor(Color.WHITE);
}
return;
}
private final void turnOffFlashlight()
{
FlashlightState = false;
Lamp.setImageResource(R.drawable.lamp_off);
if (Flashlight.hasFlashlight) FLASHLIGHT.Off();
else findViewById(R.id.lnrLyt_Main).setBackgroundColor(Color.BLACK);
return;
}
}
您怎么看?有任何改进建议吗?
#1 楼
使用驼峰式作为您的变量名。 for if else语句在您的代码中使用:
if (!FlashlightState) turnOnFlashlight();
else turnOffFlashlight();
更合适的方法是:
if(!FlashlightState) {
turnOnFlashlight();
} else {
turnOffFlashlight();
}
如果您绝对想省略花括号,请省略它们仅单陈述“仅当”子句。如:
public boolean MyBoolean
使用killProcess是一个坏习惯。 (改为销毁所有活动)。
如果要退出某个应用程序,只需确保该应用程序中的所有活动都是
public boolean myBoolean
'ed。如果要退出某个活动,请使用
if(bool) doSomething(); //No else statements
,这将调用关于您的活动。您应该让操作系统尽可能地处理活动的生命周期。假设您只有一个活动应用程序,则调用finish();
应该会破坏您应用程序中的唯一活动,从而在第一次机会时将其退出。最后有语句finish();
。这是完全多余的,没有用。私有方法声明中的冗余final关键字
您的私有方法将不会被覆盖或其他任何东西,它们不需要final关键字。
onDestroy()
:子类不能覆盖此方法finish();
:子类不能覆盖此方法return;
:子类不能覆盖此方法,子类也不能覆盖此方法(冗余)可选:
重构您的打开和关闭功能。
您当前调用两个不同的功能,它们的功能大致相同,具体取决于您是否打开或关闭手电筒。 />代替以下内容:
if (!FlashlightState) turnOnFlashlight();
else turnOffFlashlight();
您可以执行以下操作:
toggleFlashLight();
在手电筒中您可以执行以下操作:
private void toggleFlashLight() {
FlashlightState = !FlashlightState;
if(FlashlightState) {
//Turn it on;
} else {
//Turn it off;
}
}
还有其他十二种设计方法。 (您想在哪里实际转换布尔值,等等。但这只是一个例子)
#2 楼
这是@ZeroStatic已经说过的内容。这些可变的静态变量令人深感不安:
private static boolean FlashlightState;
private static long BackPressed;
private static ImageView Lamp;
为什么这些是静态的?您是否打算同时运行此活动的多个实例?做什么的?我建议将所有这些都设为非静态。
这是关于什么的内容:
AudioManager VibratorState = (AudioManager) getApplicationContext().getSystemService(Context.AUDIO_SERVICE);
// ...
VibratorState = null;
首先,您呼叫音频服务
VibratorState
,这完全是一种误导,然后为什么将其设置为null
?是否有文档推荐这种做法?如果不是,则可以合理地假设该变量将被正常垃圾回收。这是毫无意义的:
finish();
this.onDestroy();
调用
finish()
就足够了,框架将调用onDestroy
。不建议在Android应用的Java代码中包含这样的文本:
AboutBox.setMessage("Name:\nVisionlight\n\nDescription:\nFlashlight application for Android based devices.\n\nVersion:\n1.0.0\n\nPlatform:\nAndroid +2.2.x(Froyo)\n\nPermissions:\nCamera, Flashlight, Vibrate, Wake Lock.\n\nUses-feature:\nCamera [NR], Flashlight [NR].\n\nProducer/Developer:\nYousha Aleayoub(Y.P.Y)\n\nLicense:\nBSD\n\nContact:\nYousha.A@Hotmail.com\n\nLink:\nhttp://yousha.blog.ir/");
这属于
strings.xml
。此外,通常不要在代码中放入如此长的行。尽可能使行短到适合窗口内。您可以轻松地将其分解为4,而无需向右滚动太多就可以更容易阅读。
使用
CamelCase
作为类名。但是,main
还有一个更大的问题,它没有说明有关该类的任何信息。常见的约定是将活动命名为SomethingActivity
,因此在您的情况下FlashlightActivity
是一个明显的选择。仅将所有大写字母用于静态常量,所以不要使用:
private Flashlight FLASHLIGHT = null;
应为:
private Flashlight flashlight = null;
评论
\ $ \ begingroup \ $
为什么将它们设为非静态
\ $ \ endgroup \ $
–Ruchir Baronia
16-3-29在22:56