今天在做一个Android的强制用户下线功能遇到一点小问题
variable 'intent' is accessed from within inner class, needs to be declared final
在内部类中访问变量“intent”,需要声明为常量
第一种情况
public class BaseActivity extends AppCompatActivity {
private ForceOfflineReceiver receiver;
@Override
public void onCreate(@Nullable Bundle savedInstanceState, @Nullable PersistableBundle persistentState) {
super.onCreate(savedInstanceState, persistentState);
ActivityCollector.addActivity(this);
}
@Override
protected void onResume() {
super.onResume();
IntentFilter intentFilter = new IntentFilter();
intentFilter.addAction("com.123456");
receiver = new ForceOfflineReceiver();
registerReceiver(receiver,intentFilter);
}
@Override
protected void onPause() {
super.onPause();
//判断是否为空
if (receiver != null){
unregisterReceiver(receiver);
receiver = null;
}
}
@Override
protected void onDestroy() {
super.onDestroy();
ActivityCollector.removeActivity(this);
}
class ForceOfflineReceiver extends BroadcastReceiver{
@Override
public void onReceive(final Context context, Intent intent) {
AlertDialog.Builder builder = new AlertDialog.Builder(context);
builder.setTitle("警告");
builder.setMessage("你被强制下线,请重新登录");
//设置为不可取消
builder.setCancelable(false);
builder.setPositiveButton("是", new DialogInterface.OnClickListener() {
@Override
public void onClick(DialogInterface dialog, int which) {
ActivityCollector.finishAll();//销毁所有活动
Intent intent1 = new Intent(context,LoginActivity.class);
// receiver = null;
context.startActivity(intent);// 重启活动LoginActivity
}
});
builder.show();
}
}
}
六十行左右处
context.startActivity(intent);// 重启活动LoginActivity
报问题
Variable 'intent' is accessed from within inner class, needs to be declared final
第二种情况
class InOut
{
String str=new String ("Between");
public void amethod(final int iArgs)
{
int it315=10;
class Bicycle
{
public void sayHello()
{
System.out.println(str);
System.out.println(iArgs);
System.out.println(it315);//此处编译出错:InOut.java:13: local variable it315 is accessed from within inner class; needs to be declared final
}
}
}
}
原因
局部变量的声明周期往往比对象短。